專題二“按鈕控制的LED”是對(duì)專題一的鞏固與深化,在學(xué)生了解了Arduino的基礎(chǔ)知識(shí)后,本專題從物理電路的連接上,增加了按鈕;從編程上,增加了變量、數(shù)字輸入和選擇結(jié)構(gòu)等內(nèi)容。
本文主要對(duì)本次課的重難點(diǎn)、主要教學(xué)設(shè)計(jì)的設(shè)計(jì)意圖以及學(xué)生上課的反應(yīng)做部分說明。
1.連接按鈕
這一部分,我們主要是引導(dǎo)學(xué)生將按鈕接到板子上,這里特別需要提醒的是按鈕是接數(shù)字口還是模擬口。按鈕有兩種狀態(tài)按下與放開,而數(shù)字口的值只有0和1,所 以教師要引導(dǎo)學(xué)生將按鈕接的是數(shù)字口。在連接時(shí),會(huì)發(fā)現(xiàn)有的學(xué)生忘了線的接法,所以教師還要提醒學(xué)生黑線接GND,紅線接VCC,第三根線接數(shù)字口。此 外,我們還要向?qū)W生說明我們使用的DFROBOT的按鈕按下是LOW(0),放開是HIGH(1),其他廠家的按鈕可能不是這樣的。
在這一點(diǎn)上,我們對(duì)Arduino教育機(jī)器人的模塊標(biāo)準(zhǔn)制訂非常有感觸,不同標(biāo)準(zhǔn)對(duì)課程的開設(shè)帶來很多不必要的影響,尤其是DFRobot的V5和V7的板子,在線序上讓我們很頭疼。
2.初步嘗試按鈕控制LED——按下亮,放開滅
引導(dǎo)學(xué)生我們將要做的第一個(gè)嘗試,即按鈕按下LED亮,放開LED滅。之后我們把程序發(fā)給學(xué)生,為學(xué)生粗略解讀程序(包括bool、“=”等),請(qǐng)他們下載觀察現(xiàn)象。與預(yù)設(shè)的情況相反,這樣便引出了用“!”來實(shí)現(xiàn)。在這里,學(xué)生還是比較容易接受的。
Arduino的范例中提供了按鈕控制LED的代碼。我們之所以沒有采用這種形式,主要是希望直接讓學(xué)生對(duì)Arduino的bool變量和數(shù)字端口的值結(jié)合起來理解。
arduino的范例:
|
我們的范例:
|
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
|
void loop() {
a=(digitalRead(2));
digitalWrite(5,a);
}
|
3.進(jìn)一步探究按鈕控制的LED——按下亮,延時(shí)滅
前面的按鈕控制LED比較簡單,學(xué)生甚至覺得這和在LED接個(gè)傳統(tǒng)開關(guān)沒有區(qū)別,所以用具體的情境引出延時(shí)的概念。這個(gè)過程中最重要的是,首先得判斷按鈕是否按下,自然地引出選擇結(jié)構(gòu)(我們用的是if結(jié)構(gòu)),然后延時(shí)一段時(shí)間,再將LED滅掉。有的學(xué)生沒有認(rèn)真聽講,在判斷是否按下的時(shí)候,條件判斷用的是“=”而不是“==”;此外設(shè)置完延時(shí)之后,并沒有將lED 滅掉,導(dǎo)致按下按鈕,LED一直亮著。
4.一個(gè)按鈕控制一個(gè)LED——按下亮,再按下滅
這一部分我們分為兩個(gè)步驟來完成。
第一步,先寫代碼來判斷當(dāng)按鈕按下,就改變Led的狀態(tài)。
強(qiáng)調(diào)的還是先判斷按鈕是否按下,只有按鈕按下的時(shí)候才改變LED的狀態(tài),提醒學(xué)生可引入一個(gè)變量k(k=0,LED滅,k=1,LED亮)。當(dāng)學(xué)生發(fā)現(xiàn)問 題后(控制及其不穩(wěn)定),然后思考原因,引導(dǎo)他們探究。通過這一探究,讓學(xué)生深刻體會(huì)到Arduino代碼中Loop部分是循環(huán)執(zhí)行的。而且 Arduino的執(zhí)行速度非常快!
第二步,引導(dǎo)學(xué)生再加入一個(gè)變量,記錄上一次的狀態(tài)。
我們提出“按下亮,放開,再按下滅”的思路,引導(dǎo)學(xué)生再引入一個(gè)記錄按鈕狀態(tài)的變量s,這時(shí),控制相對(duì)穩(wěn)定許多。此時(shí),還會(huì)有部分學(xué)生質(zhì)疑沒達(dá)到百分百的穩(wěn)定,我們向他們提出了拓展任務(wù)——按鈕的消抖。
5.擴(kuò)展任務(wù):按鈕的消抖
向?qū)W生解釋抖動(dòng)現(xiàn)象產(chǎn)生的原理及解決方法(我們采用的是延時(shí)),請(qǐng)學(xué)生自己嘗試。但是由于本課內(nèi)容量較大,時(shí)間已經(jīng)來不及了,所以拓展任務(wù)并沒有開展。
從這一課的實(shí)踐可以看出,高中的學(xué)生可以根據(jù)學(xué)生的編程能力,完成使用變量來實(shí)現(xiàn)一個(gè)按鈕控制一只LED。小學(xué)或者初中的學(xué)生,估計(jì)只能到第四部分的第一步,用延時(shí)完成就差不多了。下一周我們將開始初中的教學(xué)實(shí)踐了。
收獲:
學(xué)生在課間做了一些其他的創(chuàng)意嘗試,如有的學(xué)生設(shè)計(jì)了“按鈕按下一個(gè)亮,再按下這個(gè)滅,另外兩個(gè)亮”,“按鈕按下一個(gè)亮,再按下兩個(gè)亮,再按下三個(gè)亮”等,讓我們很是欣喜的。