【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.rhkb.cn/news/131962.html

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

相关文章

系统架构设计之道,论如何构建一个资金账户系统

👉导读 资金账户是互联网和金融业务中非常常见的系统,尤其是在电商、支付等业务中必不可少。资金账户系统本身其核心模块的整体架构往往并不复杂,但其对于资金安全和可用性的要求非常高,导致建设好一个资金账户系统并不容易。本文…

【Spring Boot】有这一文就够了

作者简介 前言 作者之前写过一个Spring Boot的系列,包含自动装配原理、MVC、安全、监控、集成数据库、集成Redis、日志、定时任务、异步任务等内容,本文将会一文拉通来总结这所有内容,不骗人,一文快速入门Spring Boot。 专栏地址…

MySQL安装validate_password_policy插件

功能介绍 validate_password_policy 是插件用于验证密码强度的策略。该参数可以设定三种级别:0代表低,1代表中,2代表高。 validate_password_policy 主要影响密码的强度检查级别: 0/LOW:只检查密码长度。 1/MEDIUM&am…

YashanDB:潜心实干,数据库核心技术突破没有捷径可走

都说数据库是三大基础软件中的一块硬骨头,技术门槛高、研发周期长、工程要求高,市场长期被几大巨头所把持。 因此,实现突破一直是中国数据库产业的夙愿。自上个世纪80年代起,中国数据库产业走过艰辛坎坷的四十余载,终…

vue组件库开发,webpack打包,发布npm

做一个像elment-ui一样的vue组件库 那多好啊!这是我前几年就想做的 但webpack真的太难用,也许是我功力不够 今天看到一个视频,早上6-13点,终于实现了,呜呜 感谢视频的分享-来龙去脉-大家可以看这个视频:htt…

美东一公司的郁闷面试题

说是题目可以用不同的语言,但是貌似 Java 是多线程的,用 Java 写肯定容易不少。 但,觉得这个题目用多线程简直是有点脱了裤子放屁。 完整题目内容 题目的网站内容如下: Please complete the following challenge in one of th…

【自动驾驶决策规划】POMDP之Introduction

文章目录 前言Markov PropertyMarkov ChainHidden Markov ModelMarkov Decision ProcessPartially Observable Markov Decision ProcessBackground on Solving POMDPsPOMDP Value Iteration Example 推荐阅读与参考 前言 本文是我学习POMDP相关的笔记,由于个人能力…

2024字节跳动校招面试真题汇总及其解答(一)

1. 【算法题】重排链表 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:hea…

Kafka3.0.0版本——消费者(自动提交 offset)

目录 一、自动提交offset的相关参数二、消费者(自动提交 offset)代码示例 一、自动提交offset的相关参数 官网文档 参数解释 参数描述enable.auto.commi默认值为 true,消费者会自动周期性地向服务器提交偏移量。auto.commit.interval.ms如果…

基于视觉重定位的室内AR导航APP的大创项目思路(2):改进的项目思路——建图和定位分离

文章目录 一、建图二、定位首先是第一种方法:几何方法其次是第二种方法:图像检索方法最后是第三种方法:深度学习方法 前情提要: 是第一次做项目的小白,文章内的资料介绍如有错误,请多包含! 一、…

华为云云耀云服务器L实例评测|初始化centos镜像到安装nginx部署前端vue、react项目

文章目录 ⭐前言⭐购买服务器💖 选择centos镜像 ⭐在控制台初始化centos镜像💖配置登录密码 ⭐在webstorm ssh连接 服务器⭐安装nginx💖 wget 下载nginx💖 解压运行 ⭐添加安全组⭐nginx 配置⭐部署vue💖 使用默认的ng…

【文件上传-配置文件】crossdomain.xml跨域策略配置文件上传

目录 一、0x00 前言 二、基础知识 1、Flash 2、crossdomain.xml文件 3、crossdomain.xml格式 4、crossdomain.xml相关参数 三、漏洞利用 1、方法: 2、上传漏洞配置文件 一、0x00 前言 在很多地方都会见查是否跨域 比如某些特定的步骤、CSRF、flash跨域劫…

SimpleCG程序交互操作

前言 之前所有示例程序都是属于展示型的,只是作为展示板输出使用,不涉及键盘和鼠标的输入交互,下面我们开始接触具有交互功能的程序。 没有交互功能的程序可以满足一定需求,不过大部分的程序是不能脱离交互功能的。程序依据使用者的操作进行相…

PbootCMS在搭建网站

1、打开网站 https://www.pbootcms.com/ 2、点击 “本站” 下载最新的网站代码 3、在本地laragon/www下创建目录(hejuwuye),并将代码放进去 4、创建本地数据库,数据库名称为: hejuwuye,然后将static/bac…

第三方软件测试机构有哪些测试服务软件测试报告收费标准是怎样的?

软件验收机构 一、什么是第三方软件测试机构? 第三方软件测试机构是区别于软件开发公司以及软件需求方的第三方机构,软件企业将软件测试外包给第三方软件测试机构已经成为了行业发展趋势。既省心省力,又降低企业成本,得出的软件测试结果以…

《机器学习核心算法》分类算法 - 朴素贝叶斯 MultinomialNB

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 朴素贝叶斯 1、朴素贝叶斯API2、朴素贝叶斯算法实际应用2.1、获取数据集2.2、划分…

EasyPHP-Devserver-17安装和配置mantisBT

文章目录 1、准备工作2、安装easyphp2.1 http://127.0.0.1 无法访问 3、安装mantisBT和phpMyAdmin3.1 配置浏览器的访问url和端口号(配置局域网内可访问)3.2 安装mantis 4、Administrator 注册新用户时设置登录密码5、附件上传6、邮件配置 文章参考自&am…

前端开发工具:助力创造精彩Web体验

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 当涉及到前端开发工具时…

Spring Boot配置文件(YAML Properties)总结

文章目录 配置文件的作用YAML配置文件Properties配置文件配置文件的加载顺序激活不同的配置文件配置文件的占位符自定义配置属性加密敏感信息配置文件的最佳实践结论 🎉欢迎来到架构设计专栏~Spring Boot配置文件(YAML & Properties)总结…

C#控制台程序中使用log4.net来输出日志

Apache log4net 库是一个帮助程序员将日志语句输出到各种输出目标的工具。log4net 是优秀的 Apache log4j™ 框架到 Microsoft .NE​​T 运行时的端口。 我喜欢他可以自定义输出,区分等级等特点。 导入库 我们在工程里添加NuGet的包。输入名称log4net &#xff0…