一.系统概述
循迹避障小车通过超声波测距模块实现小车,通过4个红外传感器进行循迹,通过按键可以进行循迹和避障模式的切换。
二.仿真概述
- 小车正常行驶,当检测到障碍物的距离小于50则停车
- 按下切换按键就会切换到循迹模式下,此时会根据4个红外传感器的识别结果进行循迹。
三.程序设计
#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