谈谈我错过的《Huawei LiteOS设备开发实战大赛》中的试题(2)
下面来看看试题3:
Ø 题目三:闹钟(显示屏+命令下发成功),130分
要求:
a)在开发板显示屏上显示闹钟时间,时间可以是假时间。
b)开发闹钟闹铃功能,实现可以是烟感扩展板蜂鸣器报警、点亮路灯、或者农业扩展板电机启动等
解题思路:
1. 显示屏上显示两套时间:当前时间和闹铃时间。这部分只需要调用LCD的相关函数,调整好LCD的显示位置即可。
闹钟的显示在LCD_task_entry任务中做处理。每个10秒钟刷新当前时钟和闹钟。
为了方便起见,还是在云端设置了SetTime和SetAlarm两个下发命令。输入后可以直接在开发板上显示已设置的系统时间和闹铃时间。
2.闹铃功能有两种方式:
(1)直接在设备端控制
一旦闹铃时间达到,则直接驱动Motor启动。当闹铃时间过(例如过了一分钟),则驱动Motor关闭。
新增Alarm_task_entry任务,每隔10秒钟检查当前时间介于闹钟时间~闹钟时间+1分钟之内,如果符合条件,则驱动马达(如已驱动则不管);如不符合条件,则关闭马达。
但这种方法,经过研究和咨询华为售后和小熊派专家,小熊派主板上并没有系统时钟,直接用GetTime()的结果是-1,所以无法利用小熊派本身进行系统时间计算。唯一的方法是定期向服务端申请获取系统时间,再将取回来的时间跟闹铃时间进行比较判断。
但从目前IoTDA提供的上报接口来看,响应数据仅仅提供一个响应码,所以无法通过图形化配置获取系统时间。
经过进一步咨询,得出的结论是:可以考虑使用使用JavaScript脚本替换图形化配置来获取系统时间。由于这块比较复杂,暂不在本次解题中做处理。
(2)本地不做控制,而是使用现有的命令接口控制设备。
在云端配置规则,当闹钟时间满足时,则下发命令给开发板,开发板收到指令后做打开Motor和关闭Motor处理。
在云端IoTDA增加定时触发的规则,检查当前时间是否闹铃时间,如果符合条件,则下发开启马达命令(如已驱动则不管);检查当前时间是否大于闹钟时间+1分钟,如符合条件,则关闭马达。
在规则中做如下配置:
当闹铃时间到达时通过命令下发驱动灯和马达亮。
结果演示:
时间显示结果如下:
当规则触发时,会亮灯和启动马达,灯亮的情况如下:
- 点赞
- 收藏
- 关注作者
评论(0)