專題二“按鈕控制的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。小學或者初中的學生,估計只能到第四部分的第一步,用延時完成就差不多了。下一周我們將開始初中的教學實踐了。
收獲:
學生在課間做了一些其他的創意嘗試,如有的學生設計了“按鈕按下一個亮,再按下這個滅,另外兩個亮”,“按鈕按下一個亮,再按下兩個亮,再按下三個亮”等,讓我們很是欣喜的。