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路紅外避障應該買那種檢測頭是直角的,我買的直的,最後只能自己做一個板子固定在底盤上,再把紅外頭固定在上面。):