本人于2018年11月初识Ardunio,接近一年的时间,带领学生从区赛,一路走向了全国赛的舞台,学生的编程,从最开始简单的一两行,到编出四五百行的复杂程序,而又能保证程序的稳定运行。源于在训练过程中,我们把按键控制灯的程序,玩出了各种花。学生从一系列按键控制灯的程序中,把握了Ardunio执行命令的顺序和逻辑,掌握了细分的程序基础架构,因此,写再复杂的程序也能保证其运行稳定。现将我们各种按键控制灯的方法整理如下,供各位从初级到进阶的创客同仁参考。
步骤1 按下按键,灯亮;松开按键,灯灭。
初学按键控制灯,一般用到的是一个分支语句:“如果,否则”。如下图。2号引脚接按键开关,5号引脚接LED灯。这个程序的功能是,按下按键,灯亮,松开按键,灯灭。
这个程序有一个缺点:它虽然语句很短,但会一直占用资源。当按下按键时,满足条件,执行“如果”中的命令,把5号脚设为高电平,灯亮。松手前,一直都是满足条件的,程序在不停地开灯,只是灯一直是亮着的,我们没有观察到一直反复开灯的表现;当松开按键时,程序又会不停地关灯(即使灯已经关了,它仍然在重复关灯这个动作)。
优化方法如下:
优化后的程序执行的效果一样的,按下按键灯亮,松开灯灭。但它对主控版资源的占用大大减小。资源的占用量的多少,对复杂程序能否稳定运行是有一定的影响的。(能否将程序优化到更少占用计算机资源,是区别普通程序员和优秀程序员的一条基本标准)
步骤2 呼吸灯。
效果:按下按键,灯由暗慢慢变亮,再慢慢变暗。
这个程序在执行时,当按下按键,灯开始由暗到亮,再由亮到暗的变化。而在灯变化的过程中,再次按下按键,是不会干扰到灯的亮度变化的。这就要说到UNO板的一大特性。它是一块单片机,一次只能执行一条命令。所以它一但开始“专注”地执行改变灯的亮度时,原本控制它开始执行亮灯的按键以及其它所有的传感器,都会处于“停工”状态,直到它把“专注”执行的命令执行完。(明白这一条,才能理解为什么当我们程序有很多功能,却会卡在某个点上,其它功能都无法现实的原因)
步骤3 一键开关灯
效果:按一次键,开灯,灯一直亮;再按一次键,关灯,灯一直灭。
分析:步骤一中的程序,按下按键,灯亮,但是一旦松开按键,灯马上就灭了,如何让程序记住或者能读取灯的状态,是实现“一键开关灯”的关键。
让程序记住灯的开关状态,可以使用“变量”。
什么是“变量”?可以把变量理解成一个盒子,里面装着一个数,你提出要求时,这个数可以按你的要求变化,你不提要求时,它会一直保存着最后一次变化后的结果。一个变量由名称、类型和值三个部分组成。
这个程序还可以优化为:按键(3号脚)不直接去控制灯(5号脚)的亮灭,只是只控制一个变量(LED)的变化,然后再由变量控制灯的亮灭。
也可以优化为:
拓展:这种开关间接控制灯的思路,可以运用到“一个开关拥有多个功能”的程序中(本例中开关中“开灯”“关灯”两个功能),只要增加变量的变化范围,变量不同的值让不同的输出设备作出不同的响应就可以了,例如,用一个开关控制“光标”在显示器上的多个选项上移动切换。
步骤4 十字路口红绿灯
十字路口最简单的一种红绿灯,每个方向有红黄绿3颗灯,4个方向共有12颗灯。要保证交通秩序的正常,计算好每个灯亮灭的时间;加上四位数码管,可以显示倒计时;如果再考虑增加每个方向的左转红绿灯,程序会变得更有意思。找时间再给大家更新这部分的程序。
评论