Hi~ (o^^o)♪, 各位深海王国的同志们,早上下午晚上凌晨好呀~ 辛勤工作的你今天也辛苦啦(/≧ω)
今天大都督继续为大家带来系列——小学生都能玩的语音模块,帮你一周内快速学会语音模块的使用方式,打造一个可用于智能家居、物联网领域的语音助手,let’s go!
(8)熟悉多线程
上节我们已经初步认识了多线程代码块的功能与运行逻辑,这节我们就来进一步熟悉多线程,实现ASRPRO在灯光循环过程中立即让灯灭掉的操作。
完善上节的代码:
在上节大都督已经给大家了一个简易的多线程程序模板,我们就在这个模板的基础上继续完善(详见:(7)初识多线程)):
1.明确线程数
我们需要实现的目标:让彩虹循环/流光溢彩运行的过程中,能够执行灭灯指令。而我们使用的引脚只有PA_2一个,所以我们的线程数也是一个。
一般来说,我们需要同时控制的设备有n个,就可以设置n个线程。比如我们如果要同时控制n个灯带,就可以设置n个多线程。
这里我们就控制1个灯带,所以修改上节代码如下:
同时在上电初始化的时,要记得将灯带初始化:
2.创建一个类似彩虹循环、流光溢彩的循环灯光效果:如呼吸灯、闪光灯
因为官方给的彩虹循环和流光溢彩代码无法更改,所以我们可以先自己创建几个类似的循环灯光效果代替他们。
首先创建两个16位整型全局变量:
light,灯光循环时的灯光亮度。
light_d,灯光循环时的灯光亮度增加量。
然后呼吸灯代码如下,效果是让灯光亮度从0逐渐增加到150,再从150减少到0:
闪光灯代码如下,效果是让灯光以150亮500ms,再灭灯500ms:
将这些代码折叠起来,看着就很简洁啦:
然后把它们放到永远循环里,就可以做出循环灯光效果啦:
3.可以修改一下需要发送的信息:
如发送数字1和2,但要注意我们并不能直接将数字1和2放进去:
但我们可以新建一个变量num:
然后给变量赋值,变量类型就可以放进去啦:
或者我们图省事,可以直接将语音识别ID放进去,最后效果都是开灯发送数字1和关灯发送数字2:
然后可以把创建的num变量删除掉,让程序更简洁点:
4.修改线程内执行的程序
首先调整线程内存为512,以防程序内存不够。
然后因为我们需要让灯光循环运行,所以需要先加入重复执行/永远循环:
然后我们发送的数据会被存储在rec_1中,如果rec_1=1,我们就开灯,如果rec_1=2,我们就关灯。
在我们关灯后要将rec_1重新置为0,这个很重要!如果没有这一步,灯带灭灯后,会出现随机灯闪的现象。
然后就可以完成目标啦,实现效果如下,在喊出指令开灯后,灯会开始一直循环闪烁,直到我们喊关灯以后才会关闭。
这样我们完成了双线程的操作,单片机一边控制灯带闪烁,一边进行语音识别。
最后所有代码如下:
如果大家需要上面的工程文件,在公众号「深海大都督」里,回复「语音控制灯带」就能获得啦!
感谢你的关注,建设深海,没你不行!
今天的学习到这里就差不多啦。下节就是本系列的最后一节,我们会对我们整个语音模块项目进行一下总结,并做一些收尾工作给大家带来一个完整的成品程序。加油!看到这里的你今天也辛苦啦٩(ˊᗜˋ)و✧。
需要的相关材料链接我都放在公众号「深海大都督」里了,回复「语音控制灯带」就能获得啦~
哈哈,让焦虑不再蔓延,信息不再高壁,如果你觉得这篇文章对你有帮助,就来个免费的点赞吧!
(◍˃̶ᗜ˂̶◍)✩我深海大都督正式授予你深海王国公民的身份~
(・ω< )★ 加入深海大家庭,快乐摆烂每一天!