在之前的学习中,我们制作了网络闹钟,现在我们给闹钟加上小憩功能和语音功能。在预定的时间闹钟会一直语音报时,如果按下掌控板的A按键,停止闹钟;如果按下掌控板的B按键,可以开启闹钟的小憩模式,让闹钟五分钟之后再响。
制作语音闹钟需要6个步骤:
1、程序初始化;
2、绘制并设置闹钟;
3、在预定时间闹钟语音报时;
4、按下B按键再睡五分钟;
5、按下A按键闹钟停止;
6、重复执行。
程序流程图如图所示
一、程序初始化
1、(1)首先程序需要初始化,设为定义函数csh。
(2)利用掌控板的WiFi模块,获取网络的实时时间。
(3)通过网络授时来获取国际标准时间,北京时间属于东八区,该模块的时区和授时服务器默认是不用改动的。
(4)初始化时钟,设置时钟在掌控板OLED屏幕上显示的位置和半径。
2、(1)创建布尔型变量“c”,如果为真,在掌控板OLED屏幕上绘制实时时钟。根据程序流程图,需要在初始化时将变量“c”设为真。
☺小贴士
布尔型变量是只有两种逻辑状态的变量,它包含的两个值是真和假。
(2)创建布尔型变量“8am”,在达到预定时间时,闹钟会语音报时,此时变量8am为真。在初始化时要将变量“8am”设为假。
3、制作语音闹钟,需要运用到语音合成(TTS)功能。TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,能将文字信息转化为声音信息,让机器能够说话。掌控拓展板的在线语音合成功能是使用讯飞在线语音合成API ,在使用该功能前,我们需要在讯飞开放平台注册并做相应的配置。
Step1 在讯飞 https://www.xfyun.cn 注册账号。
Step2 创建新应用,填写应用名称、应用分类和应该功能描述,应用平台选择“WebAPI”。
Step3 添加“在线语音合成”服务,在http://www.ip138.com查询自己的公网IP,添加到IP白名单并保存,然后将APPID和APIKey复制到程序中。
4、同样的,在使用语音合成功能之前,需要将音频初始化,并根据需求设置音频的音量。
二、绘制并设置闹钟
定义函数clock:程序调试/输入后,如果变量“c”为真,清空OLED屏幕,读取时间,绘制出时钟。而且每次读取时间前需要清空之前的显示内容,才能让时间不断替换更新。
设定闹钟在本地时间为早上八点整时,启动语音报时,此时将变量“8am”设定为真。
※指令我先知
有限循环语句,表示从起始数到结尾数取出变量的值,按指定的间隔执行相应的程序
三、在预定时间闹钟语音报时
定义函数a:如果变量“8am”为真,即当前时间与预定的闹钟时间一致,根据程序流程图可知,此时需要开启TTS语音合成功能重复播放“现在是北京时间几时几分”。而且掌控板OLED屏幕上已经不再需要显示实时时钟,所以将变量“c”设定为假,清空OLED屏幕,在屏幕上显示“起床啦!起床啦!”。
☺小贴士
掌控板获取到的“本地时间”属于数字类型,但是控拓展板的在线语音合成功能读取的内容只能是文本,所以我们需要使用“文本转换”指令,将时间数据转换成文本。
四、按下B按键再睡五分钟
定义函数b:在保证TTS语音播放内容为本地时间且OLED屏停留在“起床啦!起床啦!”界面的情况下, 即变量“8am”为真,当B按键被按下之后,即闹钟启动再睡5分钟模式,此时TTS语音不再需要播放本地时间,所以将变量“8am”设为假。等待3秒后,再用TTS语音播放“再睡5分钟”,并且在OLED屏幕上显示出来。等待300秒,即五分钟过后,闹钟再次响起,这时可以重新将变量“8am”设定为真。
☺小贴士
等待3秒是为了预留足够的时间让程序执行完之前的命令,TTS语音播放完之前的文本内容。
五、按下A按键闹钟停止
定义函数c:在保证TTS语音播放内容为本地时间且OLED屏停留在“起床啦!起床啦!”界面的情况下, 即变量“8am”为真,当A按键被按下之后,即停止闹钟,此时TTS语音不再需要播放本地时间,所以将变量“8am”设为假。等待3秒后,再用TTS语音播放“停止闹钟”,并且要在OLED屏幕上显示出来。根据程序流程图,最后需要将变量“c”设定为真,即让OLED屏幕显示实时时钟。
六、重复执行
将定义函数放在重复执行的程序内,完善程序,方便多次使用。
你能为语音闹钟增加一个倒计时功能吗?赶紧挑战一下吧!