【Proteus仿真】【STM32单片机】四驱寻迹避障小车

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

系统运行后,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设计,视频分享,技术交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/108604.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用CFimagehost源码搭建免费的PHP图片托管私人图床,无需数据库支持

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

自建私人图床方案:使用Cpolar+树洞外链轻松部署超轻量级图床,实现高效图片存储

文章目录 1.前言2. 树洞外链网站搭建2.1. 树洞外链下载和安装2.2 树洞外链网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3 Cpolar稳定隧道(本地设置) 4.公网访问测试5.结语…

免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

laravel-admin联动选择展示时ueditor样式错乱

问题 录入内容时,根据资源类型,展示不同的需要录入的内容,很常见的功能,但是在切换时,编辑器一直出不来,如图: 代码如下: $form->radio(type, 资源类型)->when(2, function…

ChatGPT新增超强插件:文本直接生成视频、海报,支持自定义修改!

全球著名在线设计平台Canva,在ChatGPT Plus(GPT-4)上推出了插件功能,用户通过文本提示,几秒钟就能生成演示文稿、PPT插图、电子书封面、宴会邀请函等各种精美设计海报,同时支持生成视频。 该插件最强大的功…

浅谈Http协议、TCP协议(转载)

TCP标志位,有6种标示:SYN(synchronous建立联机) ,ACK(acknowledgement 确认) ,PSH(push传送),FIN(finish结束) ,RST(reset重置), URG(urgent紧急) Sequence number(顺序号码) ,Acknowledge num…

uni-app:单页面的页面切换

效果 代码 <template><view><view class"tab-bar"><text class"tab" :class"{ active: activeTab 0 }" click"changeTab(0)">页面1</text><text class"tab" :class"{ active: acti…

盘点中国光博会CIOE2023上的国货

一、中国光博会历史地位 CIOE中国光博会首次举办于1999年&#xff0c;经历24年在行业的深耕及拓展&#xff0c;是全球极具规模及影响力的综合型展会&#xff0c;见证了中国光电行业的变化及蓬勃发展。无论是超高清视频领域还是AI应用领域&#xff0c;均属于近年来的热门赛道&a…

快速搭建超轻量级图床——Cpolar+和树洞外链

文章目录 1.前言2. 树洞外链网站搭建2.1. 树洞外链下载和安装2.2 树洞外链网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3 Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测试5.结语…

《动手学深度学习 Pytorch版》 4.10 实战Kaggle比赛:预测比赛

4.10.1 下载和缓存数据集 import hashlib import os import tarfile import zipfile import requests#save DATA_HUB dict() DATA_URL http://d2l-data.s3-accelerate.amazonaws.com/def download(name, cache_diros.path.join(.., data)): #save"""下载一个…

Layui + Flask | 实现注册、登录功能(案例篇)(08)

此案例内容比较多,建议滑到最后点击阅读原文,阅读体验更佳。后续也会录制案例视频,将在本周内上传到同名的 b 站账号。 已经看了 layui 表单相关的知识,接下来就可以实现注册功能,功能逻辑如下: 项目创建 新建 flask 项目下载 layui 文件,解压之后复制到指定文件编写前…

SpringBoot集成Apache RocketMQ详解

文章目录 0. 前言1. Spring Boot 集成Apache RocketMQ详细步骤1.1.添加依赖1.2.配置RocketMQ1.3.创建消息生产者&#xff08;Producer&#xff09;1.4.创建消息消费者&#xff08;Consumer&#xff09; 2. 测试验证3. 常见报错4. 参考文档5. 源码地址 0. 前言 上个章节我们学习…