专题二“按钮控制的LED”是对专题一的巩固与深化,在学生了解了Arduino的基础知识后,本专题从物理电路的连接上,增加了按钮;从编程上,增加了变量、数字输入和选择结构等内容。
本文主要对本次课的重难点、主要教学设计的设计意图以及学生上课的反应做部分说明。
相关资源下载地址:http://pan.baidu.com/s/1kTqOYs3
1.连接按钮
这一部分,我们主要是引导学生将按钮接到板子上,这里特别需要提醒的是按钮是接数字口还是模拟口。按钮有两种状态按下与放开,而数字口的值只有0和1,所 以教师要引导学生将按钮接的是数字口。在连接时,会发现有的学生忘了线的接法,所以教师还要提醒学生黑线接GND,红线接VCC,第三根线接数字口。此 外,我们还要向学生说明我们使用的DFROBOT的按钮按下是LOW(0),放开是HIGH(1),其他厂家的按钮可能不是这样的。
在这一点上,我们对Arduino教育机器人的模块标准制订非常有感触,不同标准对课程的开设带来很多不必要的影响,尤其是DFRobot的V5和V7的板子,在线序上让我们很头疼。
2.初步尝试按钮控制LED——按下亮,放开灭
引导学生我们将要做的第一个尝试,即按钮按下LED亮,放开LED灭。之后我们把程序发给学生,为学生粗略解读程序(包括bool、“=”等),请他们下载观察现象。与预设的情况相反,这样便引出了用“!”来实现。在这里,学生还是比较容易接受的。
Arduino的范例中提供了按钮控制LED的代码。我们之所以没有采用这种形式,主要是希望直接让学生对Arduino的bool变量和数字端口的值结合起来理解。
arduino的范例: |
我们的范例: |
void loop(){ if (buttonState == HIGH) { |
void loop() { } |
3.进一步探究按钮控制的LED——按下亮,延时灭
4.一个按钮控制一个LED——按下亮,再按下灭
这一部分我们分为两个步骤来完成。
第一步,先写代码来判断当按钮按下,就改变Led的状态。
强调的还是先判断按钮是否按下,只有按钮按下的时候才改变LED的状态,提醒学生可引入一个变量k(k=0,LED灭,k=1,LED亮)。当学生发现问 题后(控制及其不稳定),然后思考原因,引导他们探究。通过这一探究,让学生深刻体会到Arduino代码中Loop部分是循环执行的。而且 Arduino的执行速度非常快!
第二步,引导学生再加入一个变量,记录上一次的状态。
我们提出“按下亮,放开,再按下灭”的思路,引导学生再引入一个记录按钮状态的变量s,这时,控制相对稳定许多。此时,还会有部分学生质疑没达到百分百的稳定,我们向他们提出了拓展任务——按钮的消抖。
5.扩展任务:按钮的消抖
向学生解释抖动现象产生的原理及解决方法(我们采用的是延时),请学生自己尝试。但是由于本课内容量较大,时间已经来不及了,所以拓展任务并没有开展。
从这一课的实践可以看出,高中的学生可以根据学生的编程能力,完成使用变量来实现一个按钮控制一只LED。小学或者初中的学生,估计只能到第四部分的第一步,用延时完成就差不多了。下一周我们将开始初中的教学实践了。
收获:
学生在课间做了一些其他的创意尝试,如有的学生设计了“按钮按下一个亮,再按下这个灭,另外两个亮”,“按钮按下一个亮,再按下两个亮,再按下三个亮”等,让我们很是欣喜的。