AppInventor+掌控板:为硬件编程(2)

网友投稿 2018-12-22 18:01

我们将开发一个声控灯应用,在安卓手机中,通过语音来控制一个LED灯的开关及亮度。用户对手机说“开灯”、“关灯”、“亮一点”、“暗一点”等语音指令,连接在掌控板上的一个LED灯将被点亮、关闭,或变亮、变暗。

一、硬件准备与连接:

(1)启动掌控板: 用手机充电器为其供电,启动后屏幕上显示掌控板在局域网中的ip地址,如图1左图所示。具体设置方法清见上期文章。

https://cdn.china-scratch.com/timg/181224/1P1144150-0.jpg

图1 连接掌控板与LED灯

(2)准备两条鱼夹线及1个LED灯,将LED灯的正极(长针)连接至掌控板的引脚0(黄线),将负极连接至引脚G(绿线),如图1右图所示。

这里需要说明一下,掌控板的引脚0是模拟信号输出端口,输出从0到+3.3V的直流电压,它接受从0到1023的数字指令,0表示输出电压为0,1023表示输出电压为+3.3V。

二、手机语音识别功能设置

打开手机内置的语音识别功能,如果手机无法识别中文,请安装讯飞语音+应用,并将讯飞语音+设为默认的语音识别器。相关下载链接及操作方法参见博文《语音识别应用——生词朗读》(http://blog.sina.com.cn/s/blog_62218b990102vwa6.html)。

三、设计用户界面

在App Inventor中创建一个新项目,命名为“声控灯”,向屏幕中添加三个组件:按钮、网络数据库及语音识别器。设按钮的宽高为充满,显示文本为“控制电灯”,字号为“56”;设网络服务器组件的服务器地址为掌控板的ip地址,端口号为8888,如图2所示。

https://cdn.china-scratch.com/timg/181224/1P114E11-1.jpg

图2 声控灯应用的用户界面

四、编写程序

(1)设置列表常量

当用户输入语音时,语音识别软件返回的识别结果未必如我们所愿,例如,当用户说“暗”时,它可能返回文字“按”。为了解决这一问题,我们设置了指令关键字列表,将发音相同的常见字保存在相应的列表中,以便程序查询,如图3所示。

https://cdn.china-scratch.com/timg/181224/1P1156358-2.jpg

图3 项目中的列表类变量(充当常量)

(2)设置数值变量及常量

如图4所示,图中的“亮度”对应于LED灯的亮度,取值范围为0~1023;图中的“亮度增量”其实起到常量的作用,每次用户说“亮一点”或“暗一点”时,亮度增加或减少200。

https://cdn.china-scratch.com/timg/181224/1P1155458-3.jpg

图4 项目中的数值变量

(3)过程

创建一个有返回值的过程——开关指令,如图5所示。该过程有两个参数,其中的“指令字符”是语音识别的结果,而“开关常量列表”就是本节(1)中的列表。过程的返回值为逻辑值——真或假。

https://cdn.china-scratch.com/timg/181224/1P11541I-4.jpg

图5 有返回值的过程——开关指令

(4)事件处理程序

应用中共有两个事件处理程序,如图6所示。当用户点击按钮时,让语音识别器开始录制语音,当语音识别器完成识别任务时,根据识别的结果,向掌控板发送指令。注意,发送指令使用的是网络数据库组件的保存数据块,其中的参数“标记”设为“pina0”,对应于掌控板上的引脚0,而参数“存储数据”设为变量“亮度”的值。

https://cdn.china-scratch.com/timg/181224/1P1155640-5.jpg

图6 项目中的事件处理程序

以上就是声控灯应用的全部代码,下面进入测试环节,测试结果见下面的视频。

在视频录制过程中,由于录制设备的问题,亮度变化不明显,因此将亮度增量调整为300,特此说明。

五、讨论

这是一个非常简单的硬件控制类应用,只用到了掌控板一个引脚的输出功能。从输入、输出角度来讲,掌控板具有丰富的输入输出通路,输入包括按键、声、光、加速度传感器等,输出包括屏幕、声音、LED灯等,此外,数字及模拟引脚兼具输入输出功能,本应用使用的就是它的模拟引脚。如果将这些输入输出手段排列组合起来,再配合手机的各种功能,应该可以创造出功能丰富的应用。希望本文能够起到抛砖引玉的作用,也希望未来有更多的、更具特色的应用产生出来。

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com