学习笔记
http://blog.csdn.net/believe_in_/article/details/79123428
http://blog.csdn.net/believe_in_/article/details/79146981
http://blog.csdn.net/believe_in_/article/details/79167064
http://blog.csdn.net/believe_in_/article/details/79211103
超声波测距
一、题目要求
使用32开发板,完成超声波测距串口实时显示;
二、题目相关知识点
a) IO口的操作
b) 定时器
c) 串口
三、完成过程
在任务前期观看相关视频了解相关知识点,然后通过模仿程序步骤进行相关知识的加深和巩固。LED灯-à蜂鸣器——》按键——》时钟——》串口——》外部中断——》定时器——》看门狗;在看过定时器内容之后借助模板完了超声波测距前期任务,在中期的几天时间内完成了串口设置警报距离。
四、设计思路:
主要内容超声波测并警报
直观显示:串口实时监控
第一、测距:
测距需要使用到定时器,利用定时器的输入捕获功能进行距离的计算;
第二、数据显示
利用串口的显示配置显示超声波得到的返回值
第三、警报
在串口中设置距安全距离,并且利用超声波得到的值与之想比较,加上相关条件利用蜂鸣器进行报警。
第四、卡尔曼滤波
减小抖动让显示状态更加稳定;
第五、OLED显示
近几天摸索了OLED的显示,尝试加上OLED的显示。虽然能够实现显示,但是对于它的工作状态不太清楚,接下在会继续了解,并进行下一步学习;同时做好复习;
总结:
时钟、串口、外部中断、定时器内容较为复杂,想要完全掌握还需在后期的学期中经常使用,不断熟悉。
一、 使用库函数形式的程序编写,一定要细心,仔细,在已经封装好的库函数中有很多相似的库函数名,偶尔会遇到使用错误,但是系统不报错,这种情况下出现问题就比较难解决。找错过程很是艰难。
二、 在使用开发板时,例如使用定时器相关的引脚时一定要查看芯片的数据手册,里对于引脚的描述都很清楚。程序要与板子相对应。避免程序正确使用硬件连接错误。
三、 在使用相关模块时,应理解模块的工作原理及工作条件,一方面尽可能避免损坏模块,另一方面避免出现不必要的错误。
四、 对于这次的培训,由于超声波模块在之前的培训中已经有所了解,所以知道它的工作原理,完成测距的问题比较简单。但是对于串口发送数据设置警报距离却遇到了一些难题:
第一、 不清楚在串口接收数据之后在单片机内的存储形式
第二、 在单片机接收数据完成之后,如何把数据转化为有效数据
以上问题中,经过多次尝试终于发现了问题所在:
串口接收的数据会以字符的形式储存在库函数中的数组中,方式:高位在前
取有效数据,在数组获得数据后如何取得有效数据,然后串口显示。直接取字符取得的是字符对应的ASCII值,并不是真实值,但是可以利用这点。在取得字符ASCII减去48即可得到真实值。
五、 对于安全距离的设置所遇到的问题:
第一、 设置安全距离值会自增,以此累加
第二、 安全距离不可多次接受,即只能接收一个安全距离里的设置;而且会出现负值设置的为正值,但在显示时数据变成负值。(并非所设置数据的负值)
解决方法:
第一、 多次测试距离自增是因为上一次设置的值并未清除,以至于在后来的设置中在原来的基础上进行增长。
第二、 安全距离在接收第一次之后,再次接收出现了数据会出现意外值;
此问题是在上一问题解决后出现的附带为题,在处理数据时不够严谨出现漏洞。当数值从大变小时会出现差值并且是负的,在此基础上后来接收的数据都与问题。从而解决问题。