一. 系统概述
循迹避障小车利用超声波测距模块实现距离检测,并配备四个红外传感器用于循迹功能。用户可以通过按键在循迹模式和避障模式之间进行切换。
二. 仿真概述
- 在正常行驶状态下,如果小车前方检测到的障碍物距离小于50,则小车会自动停车。
- 按下模式切换按钮后,小车将切换到循迹模式,此时会根据四个红外传感器的反馈进行循迹操作。
三.程序设计
#include <main.h>
#include <Car.h>
//
u8 Key;//按键检测
u8 Rxdat;
u8 m=0;
u8 m2=1;
float leng;
//
//
void Init_Test(void);
void Test(void);
void Display(void);
//
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//2:2
Init_Test();
while(1)
{
Key_Scan(&Key);
if(Key==5) { Key=0;m=~m;OLED_Clear();}
OLED_ShowString(1,7,"Mode");
if(m)
{//循迹
OLED_ShowString(3,8,"TK");
if(Key1==0|Key2==0|Key3==0|Key4==0)
{
if(Key1==0) {OLED_ShowNum(2,1,1,1); m2=3;}
if(Key2==0) {OLED_ShowNum(2,16,1,1); m2=4;}
if(Key3==0) {OLED_ShowNum(4,1,1,1); m2=4;}
if(Key4==0) {OLED_ShowNum(4,16,1,1); m2=3;}
} else
{
if(Key1==1) {OLED_ShowNum(2,1,0,1);}
if(Key2==1) {OLED_ShowNum(2,16,0,1);}
if(Key3==1) {OLED_ShowNum(4,1,0,1);}
if(Key4==1) {OLED_ShowNum(4,16,0,1);}
m2=1;
}
}else
{//避障
OLED_ShowString(3,8,"OA");
Hcsr04GetLength(&leng);
OLED_ShowNum(4,8,leng,2);
if(leng>50) m2=1;
else
{
Car_Stop();
Car_Left();
delay_ms(2000);
if(leng>50) m2=1;
else
{
Car_Right();
delay_ms(2000);
if(leng>50) m2=1;
}
}
}
switch(m2)
{
case 1: Car_Go(); break;
case 2: Car_Back(); break;
case 3: Car_Left(); break;
case 4: Car_Right(); break;
case 5: Car_Stop(); break;
}
}
}
24-32f-47