查看: 192|回复: 3

[教程] 再~升级版microbit按钮台灯-自定义挡位换挡灯

[复制链接]
本帖最后由 春秋大仙 于 2019-9-3 12:05 编辑

之前写了一篇升级版microbit台灯-普通按钮切换亮灭的教程帖,看到帮助到了一些老师,非常的开心。在之前使用DF—Boson for micro:bit套件开展的一次学生编程教学活动中,经过同学的发散思维,这个项目又再次升级——因为按钮切换亮灭其实就是只有一个挡位的台灯,那么如何设计多档位的台灯呢?
关于换挡灯的设计,很多同学使用了不同的设计方法,展现出了很高的热情和天赋。因为程序应用到了变量,还是有很多同学似懂非懂,所以这里就尽量系统的讲解一下课程中设计的换挡灯程序。
201909037594.png

在这节课程之前,已经学习了按钮台灯(按钮切换led灯亮灭)的程序设计方法。程序如图(按钮模块接P0,led灯接P1),
201909038970.png
程序教学请参考教程贴:http://mc.dfrobot.com.cn/thread-269304-1-1.html。通过这个程序的学习,我们知道了变量的作用很强大,可以起到保存状态的作用。那么接下来,我们就来思考如何设计三个挡的换挡灯程序。

功能描述:按钮按第一下(1挡),led灯有点亮;按钮按第二下(2挡),灯最亮;按钮按第三下(3挡),灯灭。依次循环。程序的设计思路和结构与按钮台灯的项目是一样的。在按钮按下后,二次判断变量值,通过改变变量值来达到改变档位的效果。程序初步设计如下
201909034837.png

程序完善:首先,要记得在第三档位把变量从新设置回0,才可以实现变量在0123之间的循环;最后就是要消抖。按照“按钮切换亮灭”项目的消抖方式,其实是有缺陷的。如果长按按钮不松手,那么灯会“亮灭亮灭”切换,而不是按下按钮直到手抬起后灯才会亮或者灭。为了实现后者效果,可以用“等待直到”指令,直到按钮在非按下状态时,再执行下面的程序。完整程序如下:
201909031045.png

利用中断:有些同学独辟蹊径,直接利用引脚中断来实现变量的累加。在扩展—功能模块里,添加“引脚中断”指令,当P0引脚中断模式为上升(即电平由低到高,按钮被按下)时,变量加一。程序如下:
201909036233.png 201909032574.png

换挡方法2—利用余数:部分同学在思考如何实现换挡的程序时,没有选择直接“设置变量0123”的方法,而是通过数学知识—余数的原理,因为挡位有三个,所以通过判断“变量÷3的余数是否等于1、2、0”,即可完成换挡程序,不需要手动将变量设置回0了。程序如下:
201909036397.png

思考:做到现在我们来思考一个问题,如果按照刚才所用的几种思路,可以很好的完成3挡换挡灯,可是如果要做一个10挡、20挡的换挡灯,程序设计是不是很复杂?那能不能实现一个简单的程序,只要改变总挡位参数,就可以实现自定义挡位数量的换挡灯?答案当然是可以啦。

自定义挡位设计:首先,总挡位数是一个自定义的数值,是一个变量。根据上面用到的方法,我们发现,可以用“变量除以总挡位数的余数”来实现挡位划分。所以,程序需要设置“挡位”、“总挡位数”两个变量。而灯的亮度,可以设置为每个挡位的亮度是等差递增的,将最大亮度按总挡位数均分,乘以变量挡位即可实现。最终程序如下:
201909031415.png

同学们在解决问题、设计程序的过程中,深刻体会到解决问题的方法不止一种,头脑激荡后的结果震撼人心。
希望这篇帖子对老师们的教学也能有所帮助。

201909036573.png

pATAq  版主

发表于 2019-9-10 00:02:22

可以用led矩阵显示当前灯的亮度,或者长按按钮快速调节灯光亮度等功能,应该蛮好玩
回复 支持 反对

使用道具 举报

春秋大仙  初级技师
 楼主|

发表于 6 天前

pATAq 发表于 2019-9-10 00:02
可以用led矩阵显示当前灯的亮度,或者长按按钮快速调节灯光亮度等功能,应该蛮好玩 ...

有道理~准备试一试
回复 支持 反对

使用道具 举报

EmSECpn6  见习技师

发表于 3 天前

还可以制作电子骰子
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail