一. 系统概述
本系统采用循迹避障小车,利用超声波测距模块和四个红外传感器来实现智能导航。通过按键操作,用户可以方便地在循迹模式和避障模式之间切换,以满足不同的行驶需求。
二. 仿真概述
- 在正常行驶状态下,小车通过超声波测距模块实时监测前方障碍物的距离。当检测到距离小于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