STM32基於hal庫的智能小車(2)紅外循跡

4路循跡如下圖:
在這裏插入圖片描述
按着它的說明接線就好了,並選定好單片機引腳。我用STM32CUBEMX接着上一篇文章添加4個引腳,最後生成的程序如下(main.h):

#define BZ1_Pin GPIO_PIN_4
#define BZ1_GPIO_Port GPIOA
#define BZ2_Pin GPIO_PIN_5
#define BZ2_GPIO_Port GPIOA
#define BZ3_Pin GPIO_PIN_6
#define BZ3_GPIO_Port GPIOA
#define BZ4_Pin GPIO_PIN_7
#define BZ4_GPIO_Port GPIOA

其中說明如:
//定義紅外避障引腳及功能
//最左邊紅外頭BZ4_Pin
//左邊紅外頭BZ3_Pin
//最右邊紅外頭BZ1_Pin
//右邊紅外頭BZ2_Pin
在main.h中添加如下:

//定義讀取端口高低電平
#define BZ1_IN			HAL_GPIO_ReadPin(BZ1_GPIO_Port,BZ1_Pin)//讀取最右邊紅外頭數據,如果爲1則表示靠近黑線
#define BZ2_IN			HAL_GPIO_ReadPin(BZ2_GPIO_Port,BZ2_Pin)
#define BZ3_IN			HAL_GPIO_ReadPin(BZ3_GPIO_Port,BZ3_Pin)
#define BZ4_IN			HAL_GPIO_ReadPin(BZ4_GPIO_Port,BZ4_Pin)

在main.c中添加如下程序:

//紅外循跡避障測試
	//黑色無反射,輸出1,燈亮
	while(1)
	{
		if(BZ1_IN&&BZ2_IN&&BZ3_IN&&BZ4_IN)//如果同時檢測到信號,則停車,燈閃爍
		{
			CAR_STOP;
			LED_on;
			HAL_Delay(300);
			LED_off;
			HAL_Delay(300);
		}
		else if(BZ1_IN||BZ2_IN)//如果左邊兩個紅外避障有信號則右移
			{
				LED_on;
				CAR_RIGHT;
			}
		else if(BZ3_IN||BZ4_IN)//如果右邊兩個紅外避障有信號則左移
			{
				LED_on;
                CAR_LEFT;
			}				
		else 
			{
				LED_off;
				CAR_UP;
			}
	}

最後連接圖如下(4路紅外避障應該買那種檢測頭是直角的,我買的直的,最後只能自己做一個板子固定在底盤上,再把紅外頭固定在上面。):
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章