计算机能力挑战赛源码
虽然这次比赛很狗,但也学到不少,让我知道再好的程序也需要包装
设计制作一款可以人机交互、具备移动互联功能的智能车载终端系统。
(1)可以实现音频文件的录制功能,不通过第三方的导入功能,直接录制并存储音频。 (2)实现歌曲播放控制的更多操作,例如生成播放列表、设置循环模式(单曲、顺序、随机)等。 (3)模拟实现汽车"黑匣子"功能:当某一按键按下时,系统记录当前时刻的仪表信息(如水温、油位、车速及运转状态、照明灯与继电器状态等),并存储于EEPROM硬件中;关机后重新开机能够复现前次的各类信息。
在拿到题目的时候,首先浏览了一遍题目,第一感觉: 这什么鬼、题目量也太大了吧,裸机手撸死翘翘好吧,所以果断选择uCos来作为调度系统,进行多任务管理。虽然任务量很大,但对处理器的要求并不是很高,只是逻辑布置很麻烦,所以我计划使用STM32F103ZET6来做这个。 然后开始逐步分解题目内容,从基本要求开始做,一点一点增加任务,完成项目,下面开始讲解基本任务:
第一点要求读取SD卡音乐文件,并且播放,这里的技术要点主要是建立一个FAFT文件系统,挂载SD卡,读取我们指定的音乐目录下的音乐文件,然后通过解码播放,这里选择VS1053模块来做解码,接一个扬声器播放。 TFT显示信息直接使用LCD就行,使用极其方便,初始化一下,直接调用API就行,这里我一开始想使用EMWIN来做界面,但考虑到直接使用这些不是熟练,故放弃使用EMWIN做界面。关于显示歌曲的信息,因为直接使用的VS1053,可以直接通过寄存器发送读取对应信息的指令,之后读取对应返回值进行处理就行,这部分代码在正点原子战舰的例程里面有给出,代码封装的风格很好,读一遍基本可以理解,然后就能调用。关于音乐切换其实就是在mp3初始化时,把所有音乐的文件路径存储到一个字符串链表里面,播放不同音乐就是根据链表重新选择一下文件路径,然后再进入死循环播放就行了,音乐暂停,在UCOS里面直接使用挂起任务就可以完成,需要继续播放则使用任务恢复API就可以完成恢复。
仪表显示因为没有使用emwin界面工具,用单纯的纯手画图方式设计一个好看界面太占据内存,并且效率不高,实现意义不大,故直接使用最传统的方式----显示文字法,节省内存,提高效率(就是丑了点~) 温度采集使用DS18B20来采集温度信息,单总线结合GPIO模拟协议进行写入和读取,电机速率采集则使用红外对管测速,通过外部中断配合定时测量一段时间内转动码盘上经过的孔的数量,从而计算出速率,加速减速通过改变步进电机脉冲之间的时间。 DS18B20: 测速模块:
音频的录制和mp3播放使用的同一个模块,故在使用音频播放时需要创重新初始化vs1053同时需要重新配置mp3播放的功能,录音的使用和mp3其实差不了多少,正点原子关于这个模块有较详细的叙述,后面我也简单的写一下。
歌曲列表的显示其实就是轮询SD卡音乐文件夹下各个音乐的信息,然后将音乐名称打印出来,每次切换音乐都重新打印,可以刷新列表,关于切换音乐,顺序播放切换音乐就是对链表切花时位移一个,单曲位移为0,使播放原地踏步,随机播放呢,我使用的UCOS内部产生32位随机数的API然后除以最大音乐数目取余数,相当于在所有音乐之中随机播放音乐。
黑匣子这个难度不是很大,IIC连接EEPROM存储信息就行了,但是跑着uCos上可能会出一些问题,尤其在使用正点原子的ucos延时时会出现这个问题,正点原子ucos代码us级延时误差挺大,我文中会给出解决方法。 EEPROM模块:
移动互联网功能就是一个上云功能,at指令配好,了解一下MQTT协议就能完成,然后就可以传输数据上云了(公网云),我们这使用的是阿里云平台,因为他有个快速制作app界面的功能,所以使用起来很方便,也能做出题目要求的界面效果,所以使用阿里云。 ESP8266模块:
语音识别直接配置完整的模块,写入识别信息,模块自带匹配功能,识别之后执行对应的指令,配置过程很简单,直接使用源码没有问题! LD3320语音识别模块:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。