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路红外避障应该买那种检测头是直角的,我买的直的,最后只能自己做一个板子固定在底盘上,再把红外头固定在上面。):
在这里插入图片描述

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