DiFi第十課按鍵(下)
數位腳D2用來接受數位輸入,接收後顯示的值為0或1,輸入端GND(低電位)時值為0,輸入端3.3V(高電位)時值為1
DiFi學習板已經內建了上拉電阻線路(註),所以按鍵未按下(開關未接通)時輸入值為1,按鍵按下(開關接通)時輸入值為0
預設INPUT是低電位,但是DiFi未按下按鍵應該是高電位,需要在設定之後加一個等待時間,讓程式有時間設定為高電位(1)。
拿一條麵包線,一端接類比腳A0當作訊號輸入,一端接板子上寫[KEY]的插孔(上圖標h),上圖標示[H]就是 [ 按鍵 ]
再拿一條麵包線,一端接數位腳D7,一端接板子上寫[LEDG]的插孔(上圖標d),由數位腳位D7來控制輸出高電位(3.3V)或低電位(0V),燈亮或滅。
一、計數器
按一次按鍵,計數器加1,計算按鍵次數。
做一個計數器變數。
一開始先將變數計數器值設為0
重複執行:判斷按鍵是不是有按下按鍵,讀取數位腳位(2)的值。
如果按鍵按下時(數位腳位2的值=0),就輸出一個0(低電位)給數位腳7,讓LED亮綠色,並將計數器的值加1
程式下載:按鍵(計數器).sb2
二、計數器(修正)
上面的程式跟我們的需求是不符的,按一下會跳很多次。
因為按下去以後,數位腳2會一直收到低電位直到放開,所以計數器的值就一直加上去了。
要如何修正呢?
[等待讀取數位腳2=0] ,等待按下按鍵,按下後就亮綠燈。
[等待讀取數位腳2=1],等待放開按鍵,放開後就關燈,並讓計數器的值加1。
程式下載:按鍵(計數器)修正.sb2
延伸:
1.增加倒數計時功能,限制時間內的按鍵次數才有效
2.比賽看哪一組在時間內的按鍵按最多
3.將按鍵換成水銀開關,夾在頭上變成搖頭晃腦比賽
三、檯燈開關(兩段式開關)
同一顆按鍵,按第一次燈亮,再按燈滅,再按燈亮,再按燈滅….。
程式下載:檯燈開關.sb2
延伸:
1.再接兩條麵包線,讓RGB LED 輪流亮綠、紅、藍三個顏色。
2.增加一條麵包線連接數位腳位8和蜂鳴器,讓按下按鍵時蜂鳴器也會同時響。
四、反應測試
測試你的神經反應:
準備好時,按下按鍵,隨機時間後LED亮,看到亮燈,要立刻按下按鍵。螢幕上顯示你看到亮燈到按下按鍵的反應時間。
按綠旗後的說明
開始先出現主題及說明頁,等待按鍵開始。
如果按下按鍵,數位腳D2收到低電位,小貓出現。
等待放開按鍵,才開始隨機選擇亮燈時間。
計時器歸零,重新計時,並顯示時間,一直到再一次按下按鍵,停止程式。
程式下載:反應測試.sb2
延伸:
增加一條麵包線連接數位腳位8和蜂鳴器,準備好時,按下按鍵,隨機時間後LED亮,並且蜂鳴器發出聲音,看到亮燈或聽到聲音,要立刻按下按鍵。螢幕上顯示你看到亮燈或聽到聲音到按下按鍵的反應時間。
五、電子骰子
按下按鍵,LED開始變化不同顏色,鬆開按鍵,停在某一顏色。按鍵按下後鬆開的時間不同,最後停止時的顏色不同。
接線圖:
拿一條麵包線,一端接數位腳D2當作訊號輸入,一端接板子上寫[KEY]的插孔(上圖標h),上圖標示[H]就是 [ 按鍵 ]
再拿一條麵包線,一端接數位腳D7,一端接板子上寫[LEDG]的插孔(上圖標d)。
再拿一條麵包線,一端接數位腳D6,一端接板子上寫[LEDR]的插孔(上圖標e)。
再拿一條麵包線,一端接數位腳D5,一端接板子上寫[LEDB]的插孔(上圖標f)。
[腳位2模式設為INPUT],設定數位腳2為輸入。
原來LED亮著,先用[腳位7數位輸出1]、[腳位6數位輸出1]、[腳位5數位輸出1]讓3個腳位輸出高電位,讓LED熄滅,才能開始進行。
接著不斷的偵測有沒有按下按鍵。
如果有按下按鍵就先關閉上次亮的顏色,然後隨機讓D5、D6、D7其中一個輸出0(低電位),那個顏色就亮起來。
鬆開按鍵時,D2沒有訊號輸入,燈就停止隨機亂閃顏色。
程式下載:電子骰子.sb2
延伸:
1.比大小:紅色代表1,綠色代表2,藍色代表3,看看誰骰的比較大。
2.加上[說…..積木],說出燈亮的顏色
3.增加一條麵包線連接數位腳位8和蜂鳴器,按下按鍵時發出聲音,增加聲音效果。
六、顏色猜猜機
設計一個遊戲機器,讓玩家猜顏色。
在螢幕上先出現三個顏色讓玩家選擇(猜),選好後玩家按下DiFi板子上的按鍵,三個顏色的LED燈開始亂數閃爍,鬆開按鍵時,某一個顏色的燈恆亮,如果猜中顏色,就說[猜對了],如果猜錯,就說[猜錯了]。
接線圖:
拿一條麵包線,一端接數位腳D2當作訊號輸入,一端接板子上寫[KEY]的插孔(上圖標h),上圖標示[H]就是 [ 按鍵 ]
再拿一條麵包線,一端接數位腳D7,一端接板子上寫[LEDG]的插孔(上圖標d)。
再拿一條麵包線,一端接數位腳D6,一端接板子上寫[LEDR]的插孔(上圖標e)。
再拿一條麵包線,一端接數位腳D5,一端接板子上寫[LEDB]的插孔(上圖標f)。
螢幕畫面
主程式:
開始先將說明圖片移到定點。
原來LED亮著,先用[腳位7數位輸出1]、[腳位6數位輸出1]、[腳位5數位輸出1]讓3個腳位輸出高電位,讓LED熄滅,才能開始進行。
[腳位2模式設為INPUT],設定數位腳2為輸入。
說出使用方法
等待按下按鍵。
如果按鍵按下時,數位腳位D2得到0,就開始隨機讓D5、D6、D7其中一個輸出低電位,讓LED亮,再暗,再亮另一個顏色………。
直到放開按鍵,數位腳位D2得到1
然後判斷答對了嗎?
使用[說(……)]的擴充積木可以將文字轉換為聲音,讓程式真的說出來。
綠色角色:
程式開始先將顏色圖片移到定點。
當被選中,就將選色變數設為7,做為主程式判斷對錯的依據,並說出選色結果。
如果選的是其他顏色,會收到其他顏色的廣播,就將自己隱藏。
紅色角色:
程式開始先將顏色圖片移到定點。
當被選中,就將選色變數設為6,做為主程式判斷對錯的依據,並說出選色結果。
如果選的是其他顏色,會收到其他顏色的廣播,就將自己隱藏。
藍色角色:
程式開始先將顏色圖片移到定點。
當被選中,就將選色變數設為5,做為主程式判斷對錯的依據,並說出選色結果。
如果選的是其他顏色,會收到其他顏色的廣播,就將自己隱藏。
程式下載:顏色猜猜機.sb2
延伸:
1.增加一條麵包線連接數位腳位8和蜂鳴器,在按鍵時發出特殊聲音,答對或答錯時也可以發出不同的音樂。
2.答對或答錯時更換不同的造型。
注意:
win10或Mac系統,才可以使用[說(……)]的擴充積木可以將文字轉換為聲音,讓程式真的說出來中文,否則只能說英文。
——————————–
註:
讀取資料時,常常因為受到環境雜訊的影響,會發生讀取訊號不穩定的現象(有時讀取到 HIGH 有時卻讀取到 LOW),造成讀取判斷錯誤。為了確保它在穩定的狀態,,必須接個上拉電阻或下拉電阻。
詳細說明請參考:http://blog.ilc.edu.tw/blog/blog/868/post/97509/656348
———————————-
相關連結:
DiFi 課程目錄
http://blog.ilc.edu.tw/blog/blog/868/post/100870/660551
WFduino(Arduino)課程目錄
http://blog.ilc.edu.tw/blog/blog/868/post/97509/641433