文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
系统运行后,LCD1602显示红外、超声波检测状态和距离、小车运行状态。可通过K1键可手动切换模式,寻迹、避障、蓝牙遥控;也可通过蓝牙发送指令切换模式;
当处于寻迹模式,依靠四个红外传感器控制小车寻迹行驶;
当处于避障模式,依靠2个红外传感器和超声波控制小车避障行驶;
当处于蓝牙遥控模式,可通过上位机发送控制指令实现小车方向控制;
蓝牙遥控指令(十六进制):
0X11–>前进
0X12–>后退
0X13–>左转
0X14–>右转
0X20–>模式切换
二、软件设计
/*
作者:嗨小易(QQ:3443792007)*///系统数据获取
void sys_data_get(void)
{while(1){//超声波距离检测USART_Cmd(USART1, DISABLE); sys_ctrl.dis=ultrasonicwave_measure();USART_Cmd(USART1, ENABLE); //避障状态检测if(sys_ctrl.dis>ALARM_DIST_MIN){if(IRED_BZ_L==0)sys_ctrl.bz_status=1;else if(IRED_BZ_R==0)sys_ctrl.bz_status=3;else sys_ctrl.bz_status=0;}else{if(IRED_BZ_L==0)sys_ctrl.bz_status=4;else if(IRED_BZ_R==0)sys_ctrl.bz_status=5;else sys_ctrl.bz_status=2;}//红外寻迹状态检测if(IRED_XJ_L1==0){if(IRED_XJ_L2==0)sys_ctrl.xj_status=3;else sys_ctrl.xj_status=1;}else{if(IRED_XJ_L2==0)sys_ctrl.xj_status=2;}if(IRED_XJ_L2==0){if(IRED_XJ_R2==0)sys_ctrl.xj_status=4;}else{if(IRED_XJ_R2==0){if(IRED_XJ_R1==0)sys_ctrl.xj_status=6;else sys_ctrl.xj_status=5;}else{if(IRED_XJ_R1==0)sys_ctrl.xj_status=7;}}if(IRED_XJ_L1==1&&IRED_XJ_L2==1&&IRED_XJ_R2==1&&IRED_XJ_R1==1)sys_ctrl.xj_status=0;break;}
}//系统数据显示
void sys_data_show(void)
{while(1){//距离显示lcd1602_show_nums(2,0,sys_ctrl.dis,3,0);//模式显示switch(sys_ctrl.mode){case 0: lcd1602_show_string(8,0,"XJ");break;case 1: lcd1602_show_string(8,0,"BZ");break;case 2: lcd1602_show_string(8,0,"YK");break;}//运行状态显示switch(sys_ctrl.run){case 0: lcd1602_show_string(4,1,"Stop");break;case 1: lcd1602_show_string(4,1,"Ford");break;case 2: lcd1602_show_string(4,1,"Back");break;case 3: lcd1602_show_string(4,1,"Left");break;case 4: lcd1602_show_string(4,1,"Rigt");break;}//避障状态显示switch(sys_ctrl.bz_status){case 0: lcd1602_show_string(14,0,"N");break;case 1: lcd1602_show_string(14,0,"L ");break;case 2: lcd1602_show_string(14,0,"Q ");break;case 3: lcd1602_show_string(14,0,"R ");break;case 4: lcd1602_show_string(14,0,"LQ");break;case 5: lcd1602_show_string(14,0,"QR");break;}//红外寻迹状态显示switch(sys_ctrl.xj_status){case 0: lcd1602_show_string(12,1,"N ");break;case 1: lcd1602_show_string(12,1,"L1 ");break;case 2: lcd1602_show_string(12,1,"L2 ");break;case 3: lcd1602_show_string(12,1,"L12 ");break;case 4: lcd1602_show_string(12,1,"L2R2");break;case 5: lcd1602_show_string(12,1,"R2 ");break;case 6: lcd1602_show_string(12,1,"R12 ");break;case 7: lcd1602_show_string(12,1,"R1 ");break;}break; }
}//系统功能控制
void sys_fun_ctrl(void)
{//寻迹模式if(sys_ctrl.mode==0){if(sys_ctrl.xj_status==0)//4个红外未感应{car_forward();//前进sys_ctrl.run=1;}else if(sys_ctrl.xj_status==1 || sys_ctrl.xj_status==2 || sys_ctrl.xj_status==3)//左1、2或12感应{car_left();//左转sys_ctrl.run=3;}else if(sys_ctrl.xj_status==4 || sys_ctrl.xj_status==5 || sys_ctrl.xj_status==6|| sys_ctrl.xj_status==7)//右1、2或12感应{car_right();//右转sys_ctrl.run=4;}}//避障模式else if(sys_ctrl.mode==1){if(sys_ctrl.bz_status==0)//没有障碍物{car_forward();//前进sys_ctrl.run=1;}else if(sys_ctrl.bz_status==1 || sys_ctrl.bz_status==2|| sys_ctrl.bz_status==4)//左侧或中间障碍物{car_right();//右转sys_ctrl.run=4;}else if(sys_ctrl.bz_status==3 || sys_ctrl.bz_status==5)//右侧或中间障碍物{car_left();//左转sys_ctrl.run=3;}}//蓝牙遥控模式else if(sys_ctrl.mode==2){if(USART1_RX_BUF[0]==CAR_FORWARD_CMD)//前进{USART1_RX_BUF[0]=0;car_forward();//前进sys_ctrl.run=1;}else if(USART1_RX_BUF[0]==CAR_BACK_CMD)//后退{USART1_RX_BUF[0]=0;car_back();//后退sys_ctrl.run=2;}else if(USART1_RX_BUF[0]==CAR_LEFT_CMD)//左转{USART1_RX_BUF[0]=0;car_left();//左转sys_ctrl.run=3;}else if(USART1_RX_BUF[0]==CAR_RIGHT_CMD)//右转{USART1_RX_BUF[0]=0;car_right();//右转sys_ctrl.run=4;}else{car_stop();//停止sys_ctrl.run=0;}}//遥控切换模式if(USART1_RX_BUF[0]==CAR_MODE_CMD)//模式切换{USART1_RX_BUF[0]=0;sys_ctrl.mode++;if(sys_ctrl.mode>2)sys_ctrl.mode=0;}
}//应用控制系统
void appdemo_show(void)
{sys_parm_init();//系统参数初始化KEY_Init();ctrl_pin_init();lcd1602_init();//LCD1602初始化sys_open_show();//系统初始界面显示ultrasonicwave_init();//超声波初始化dc_motor_init();USART1_Init(9600);while(1){sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制 }
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。