基于Arduino的可扩展设备|电子词典|音乐播放器|手电筒|倒计时
本帖最后由 东风早已破晓 于 2022-8-14 13:28 编辑各位好啊,这是“基于Arduino的可扩展功能性设备”的介绍~
本介绍分为三部分:作品展示、作品介绍、实现这些功能的技术细节&探究时的心路历程
(最后还有开源资料下载地址)
一. 作品展示
(展示视频在做了在做了)
外观
基础功能界面
扩展功能界面(还没有做任何功能QAQ)
音乐选择界面
查单词 界面
二. 作品介绍
1.创作缘由
普通学生党看到家里有一块吃灰的mega2560,不想让它吃灰,且高一人刚好需要电子词典,于是就想做一款基于Arduino的电子词典,然后用洞洞板手搓出成品。搞完后觉得功能太少,就加入了音乐播放功能,就可以睡觉前听古诗了。(那个时候写的介绍基于Arduino的可扩展设备|电子词典|音乐播放器|By罗炫凌-Arduino中文社区 - Powered by Discuz!)
高三时在偷偷躺班里讲台上午睡,怕睡过头被同学发现,于是加入了倒计时功能。毕业后想着这以后能做大学宿舍集控,就学了画PCB和重新打印外壳,增强了扩展性,它也成了现在的样子。
2.作品功能介绍(详细技术细节在下面)
交互界面
操作逻辑自认为设计的挺好,主要的操作都是符合人类直觉的
图形设计.......全静态设计.......有点丑,勿喷qaq
电子词典
使用了网上找的 .txt词库(受该词库影响,只能查单词) ,手动按首字母给词库文件分了类(不会用c的文件操作),并使用 遍历文件中每个字符的方法 来查找单词,虽说这样查部分单词会有点慢,但能用(比翻牛津厚砖快)。
音乐播放器
使用了现成的库SimpleSDAudio
做了 音乐选择界面 和 列表/单曲循环播放功能(受该库影响,音乐需要转成该库作者自创格式,且 有复杂文件名的音乐可能难以播放。我的解决办法先如图处理音频文件,然后再编辑UI界面,将音乐名和编号对上位)
本来想做音乐播放的控制界面,但是Arduino是单线程的,我又不可能读懂这个库 再写一个伪多线程程序(有一个好的解决方法就是买一个触屏串口屏,能与这个库的串口通信功能完美匹配)
手电筒
除了控制开关灯数量外,这功能就很普通。但它除了在功能选择界面使用,也能在主界面使用(一开机就能用手电筒,比较方便)
倒计时
可以输入00到99小时的倒计时,可以在程序里给蜂鸣器编辑铃声,可以设置屏幕的开关
三. 技术细节&心路历程
1、词典文件
从网上下载的,原词典文件长这样
然后我把它手动分成这样,这样就让词语搜索程序的编写变得简单了
(很累啊(不会c文件操作的锅
2、键盘布线和程序的设计
为了偷懒,键盘程序的设计我就直接搜社区内的现有想法了(笑
[教程] 纯代码实现4*4矩阵键盘
简单来说就是用坐标表示按钮位置
布线的话嘛......看图
(这是最早尝试时焊的板)
3、显示屏的选择
唉,往事不堪回首,被字库和兼容折磨死了
买买退退了许多显示屏,最后选择了这款(选触摸版更好,可以在音乐控件上整一些骚操作)
这个屏自带字库、串口通信为主、附带UI设计软件,省了很多麻烦
(非带货)
4、词语搜索程序
一个词语分俩行,第一行单词,第二行音标和词性、词语释义(音标词性中一般含有四个空格,于是我就用第五个空格作为分界线分开词性和词语释义)
我的思路是用myFile.read()逐个读取文档中的字符,读取的字符直接输出(所以查词语的时候只能向下翻页,不能向上,且遇到co开头的词查询速度就很低。 如果想要高效,可以把每个单词提取出来,一个单词一个txt,再用SD库的文件搜索来搜索单词(我没空搞:'())。第一行是单词,先存放在数组中,检测到单词后的回车就与要查找的单词进行比较,如果相同就输出,然后换行继续输出;如果不是,就清空这个临时数组,继续查找单词。第二行输出音标和释义,检测到第五个空格时换行。第三行输出释义,先输出200个字符,之后按一次方向下键就输出200个字符,输出完毕后等待一会,自动清屏,进入下一次单词查找。
5、音乐播放器
我找现成的音乐播放的方法,找到两种
这个播放.wav文件https://www.basemu.com/speaker-with-arduino-and-micro-sd.html
这个播放起来很麻烦,但是功能多,我选择这种 https://www.arduino.cn/forum.php?mod=viewthread&tid=2944&highlight=%E9%9F%B3%E4%B9%90
(感谢饺子分享的方法,但是讲的并不清楚,我最终还是读了官网的英文才搞懂的
SimpleSDAudio虽然功能众多,但需要用自带的转换器转换格式,但借此可以输出高质量&双声道音乐(高质量音乐看官网好像还要加一个芯片,我就没有尝试
对于音乐播放器的人机交互,当然最好是能把SD卡里的音乐表现成一个选择界面供选择,还有下一曲等功能,但是我找了试了很久都找不到能读取文件名并储存经数组的方法(有大佬知道可以在评论区里说出来,谢谢),而且我试了很多种方法,都不能做到在播放音乐时用按钮进行暂停播放等操作(在SimpleSDAudio的例程中是可以用串口监视器实现的,是不是因为arduino不能并行处理的原因?
所以我就只能做到手动输入文件名和循环播放音乐的功能
缺点:麻烦,麻烦,还是麻烦
(本来想做音乐播放控件,亏我还画了个界面
--------——————————开源资料分享————————————
百度网盘链接:https://pan.baidu.com/s/1AVQN3RipszavVGq8m8dd3w?pwd=2333
提取码:2333
我在这里把所有的资料源码都分享出来,秉承开源精神,并感谢社区的大佬们在提问区给我的帮助。
若大家有好的想法,欢迎分享在本帖评论区 或者 单独发帖,把帖的地址留在本帖评论区。
(其实就是想看看大家有没有做好的功能能塞进来用
感谢各位的阅读
:lol:lol:lol:lol
页:
[1]