所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
基于mind+,完成自定义挡位换挡灯程序设计
春秋大仙 春秋大仙 2019-05-05 18:01:54
4
2
简单
在不久前使用DF—Boson for micro:bit套件开展的一次学生编程教学活动中,关于换挡灯的设计,很多同学使用了不同的设计方法,展现出了很高的热情和天赋。因为程序应用到了变量,还是有很多同学似懂非懂,所以这里就尽量系统的讲解一下课程中设计的换挡灯程序。
projectImage
在这节课程之前,已经学习了按钮台灯(按钮切换led灯亮灭)的程序设计方法。程序如图(按钮模块接P0,led灯接P1),程序教学请参考教程贴:http://mc.dfrobot.com.cn/thread-269304-1-1.html。通过这个程序的学习,我们知道了变量的作用很强大,可以起到保存状态的作用。那么按钮台灯,其实就是只有两个挡位的换挡灯。那么接下来,我们就来思考如何设计三个挡的换挡灯程序。
projectImage
功能描述:按钮按第一下(1挡),led灯有点亮;按钮按第二下(2挡),灯最亮;按钮按第三下(3挡),灯灭。依次循环。程序的设计思路和结构与按钮台灯的项目是一样的。在按钮按下后,二次判断变量值,通过改变变量值来达到改变档位的效果。程序初步设计如下
projectImage
程序完善:首先,要记得在第三档位把变量从新设置回0,才可以实现变量在0123之间的循环;最后就是要消抖。按照“按钮切换亮灭”项目的消抖方式,其实是有缺陷的。如果长按按钮不松手,那么灯会“亮灭亮灭”切换,而不是按下按钮直到手抬起后灯才会亮或者灭。为了实现后者效果,可以用“等待直到”指令,直到按钮在非按下状态时,再执行下面的程序。完整程序如下:
projectImage
利用中断:有些同学独辟蹊径,直接利用引脚中断来实现变量的累加。在扩展—功能模块里,添加“引脚中断”指令,当P0引脚中断模式为上升(即电平由低到高,按钮被按下)时,变量加一。程序如下:
projectImage
projectImage
换挡方法2—利用余数:部分同学在思考如何实现换挡的程序时,没有选择直接“设置变量0123”的方法,而是通过数学知识—余数的原理,因为挡位有三个,所以通过判断“变量÷3的余数是否等于1、2、0”,即可完成换挡程序,不需要手动将变量设置回0了。程序如下:
projectImage
思考:做到现在我们来思考一个问题,如果按照刚才所用的几种思路,可以很好的完成3挡换挡灯,可是如果要做一个10挡、20挡的换挡灯,程序设计是不是很复杂?那能不能实现一个简单的程序,只要改变总挡位参数,就可以实现自定义挡位数量的换挡灯?答案当然是可以啦
自定义挡位设计:首先,总挡位数是一个自定义的数值,是一个变量。根据上面用到的方法,我们发现,可以用“变量除以总挡位数的余数”来实现挡位划分。所以,程序需要设置“挡位”、“总挡位数”两个变量。而灯的亮度,可以设置为每个挡位的亮度是等差递增的,将最大亮度按总挡位数均分,乘以变量挡位即可实现。最终程序如下:
projectImage
同学们在解决问题、设计程序的过程中,深刻体会到解决问题的方法不止一种,头脑激荡后的结果震撼人心。作为老师,看到学生们想出的方法远远超出备课内容,看到学生们的热情、自信、骄傲,非常开心。这也许就是创客教育的魅力吧。
Makelog作者原创文章,未经授权禁止转载。
4
2
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]