DiFi第九課按鍵(上)
按鍵:可以控制通路或斷路的開關。
一、運用類比輸入來控制LED亮或滅
按下按鍵,RGB LED亮綠燈,放開按鍵,RGB LED熄滅。
類比腳A0用來接受類比電壓輸入,接收後顯示的值為1~1024,輸入端GND(低電位)時值為1,輸入端3.3V(高電位)時值為1024
DiFi學習板已經內建了上拉電阻線路(註),所以按鍵未按下(開關未接通)時輸入值為1024,按鍵按下(開關接通)時輸入值為1
拿一條麵包線,一端接類比腳A0當作訊號輸入,一端接板子上寫[KEY]的插孔(上圖標h),上圖標示[H]就是 [ 按鍵 ]
再拿一條麵包線,一端接數位腳D7,一端接板子上寫[LEDG]的插孔(上圖標d),由數位腳位D7來控制輸出高電位(3.3V)或低電位(0V),燈亮或滅。
預設INPUT是低電位,但是DiFi未按下按鍵應該是高電位,需要在設定之後加一個等待時間,讓程式有時間設定為高電位(1024)。
[腳位(A)0模式設為INPUT],設定A0為輸入。
[腳位7模式設為OUTPUT],設定腳位7設定為OUTPUT
一開始腳位7先輸出1,讓LED熄滅。(共陽極LED)
重複執行,讀取A0的值,做動作。
[說讀取類比腳位(A)0]的指令,讓我們可以看到類比腳A0的數值變化。
如果沒有按鍵時,類比腳A0得到1024,這時數位腳D7就輸出高電位,讓LED熄滅。(共陽極LED)
否則(按下按鍵時),類比腳A0得到1,這時就設置數位腳D7為低電位,讓綠色LED亮。
程式下載:按鍵(類比).sb2
延伸:
增加一條麵包線連接數位腳位8和蜂鳴器,讓按下按鍵時蜂鳴器也會同時響。
二、運用數位輸入來控制LED亮或滅
按下按鍵,RGB LED亮綠燈,放開按鍵,RGB LED熄滅。
數位腳D2用來接受數位輸入,接收後顯示的值為0或1,輸入端GND(低電位)時值為0,輸入端3.3V(高電位)時值為1
DiFi學習板已經內建了上拉電阻線路(註),所以按鍵未按下(開關未接通)時輸入值為1,按鍵按下(開關接通)時輸入值為0
拿一條麵包線,一端接數位腳D2當作訊號輸入,一端接板子上寫[KEY]的插孔(上圖標h),上圖標示[H]就是 [ 按鍵 ]
再拿一條麵包線,一端接數位腳D7,一端接板子上寫[LEDG]的插孔(上圖標d),由數位腳位D7來控制輸出高電位(3.3V)或低電位(0V),燈亮或滅。
預設INPUT是低電位,但是DiFi未按下按鍵應該是高電位,需要在設定之後加一個等待時間,讓程式有時間設定為高電位(1)。
[腳位2模式設為INPUT],設定數位腳2為輸入。
[腳位7模式設為OUTPUT],設定腳位7設定為OUTPUT
一開始腳位7先輸出1,讓LED熄滅。(共陽極LED)
重複執行,讀取腳位2的值,做動作。
[說讀取類比腳位2]的指令,讓我們可以看到數位腳2的數值變化。
如果沒有按鍵時,數位腳2得到1,這時數位腳D7就輸出高電位,讓LED熄滅。(共陽極LED)
否則(按下按鍵時),數位腳2得到0,這時就設置數位腳D7為低電位,讓綠色LED亮。
程式下載:按鍵(數位).sb2
延伸:
1.請同學思考[重複執行]這個積木可不可以去掉?
2.試試看去掉[重複執行]這個積木後的執行結果有什麼不同?
3.增加一條麵包線連接數位腳位8和蜂鳴器,讓按下按鍵時蜂鳴器也會同時響。
三、彈奏鼓聲
按鍵後LED亮,並使用電腦喇叭發出鼓聲
重複執行:判斷按鍵是不是有按下按鍵,讀取數位腳位(2)的值。
如果按鍵按下時(數位腳位2的值=0),就輸出一個0(低電位)給數位腳7,讓LED亮綠色,並[彈奏鼓聲]
可以選擇發出不同的[鼓聲]及節拍。
程式下載:按鍵(鼓).sb2
四、打擊樂
將程式的[彈奏鼓聲]改為[播放聲音],可以選擇發出不同的[聲音]
選取程式的[音效],點選新聲音的小喇叭圖示
選擇要播放的聲音檔(可以先點檔案內的小三角形試聽),按[確定]。
這次選敲鑼。
重複執行:判斷按鍵是不是有按下按鍵。
如果按鍵按下時(數位腳位2的值=0),就輸出一個0(低電位)給數位腳7,讓LED亮綠色,並發出鑼聲的音效。
程式下載:按鍵(鑼).sb2
五、打擊樂(修正)
如果按下按鍵不放開,會發現鑼聲被中斷變成不像鑼聲。
改成[播放音效…..直到播放完畢],可以讓鑼聲完整的播完。
程式下載:按鍵(鑼)1.sb2
六、播放音樂
重複執行:判斷按鍵是不是有按下按鍵,讀取數位腳位(2)的值。
如果按鍵按下時(數位腳位2的值=0),就輸出一個0(低電位)給數位腳7,讓LED亮綠色,並播放音效。
選擇長一點的音效,變成按下按鍵播放一首音樂。
程式下載:按鍵(音樂).sb2
七、播樂器聲音
如果將程式的[播放音效],修改為使用[設定樂器為..],加上[彈奏音符……]的指令,就可以發出更悅耳的聲音了。
使用[設定樂器為(…)],可以選擇不同的樂器
使用[彈奏音符(音階)(…)拍,來設定(音階)和節拍。
程式下載:按鍵(樂器).sb2
八、改變主角造形
主程式跟上面一樣,再多加[下一個造型]及[播放音效]指令,當按下按鍵,播放音效並改變主角造型。
加上[移動5步],讓小貓看起來像在走路。
程式下載:按鍵(造型).sb2
九、主角做特效
直接用按鍵控制螢幕主角做特效動作。
增加錄音效果
1.點選[音效],再點[麥克風]圖樣,再點黑色圓點開始錄音
圓點變成紅色,開始錄音,錄好,再按一下,完成錄音。
按[編輯]可以作一些簡單的剪輯。
不斷的判斷按鍵是不是有按下。
如果按鍵沒被按下,就說 [請按按鍵!]。
如果按鍵按下時,就說[啊!我被按了],並做魚眼效果及播放錄音音效。
程式下載:按鍵(效果).sb2
延伸:
1.改用其他特效試試看。
2.可再增加聲音效果,或變換造型,或移動…….
十、演奏自編歌曲
按下按鍵就彈奏演奏自編歌曲。
主程式:
設定樂器種類,上圖[設定樂器為1] 是鋼琴。
重複執行:判斷按鍵是不是有按下按鍵,讀取數位腳位(2)的值。
如果按鍵按下時(數位腳位2的值=0),就輸出一個0(低電位)給數位腳7,讓LED亮綠色,並演奏自編歌曲。
否則就輸出一個1(高電位)給數位腳7,讓LED熄滅。
製作音樂積木:
因為歌曲常常有一些重複的曲段,所以用積木來編排,節省程式長度,比較簡潔。
如果想要變換樂器聲音,只要更改[樂器種類]就可以了。
以小星星為例,主要分成3段,各用了2次。
主程式變得很簡短。
註:如果使用[製作一個積木]來寫程式的好處就是程式比較有規律,修改、除錯都比較容易。
程式下載:演奏歌曲(整首).sb2
十一、按鍵演奏歌曲
按下按鍵就彈奏一個單音,重複按下按鍵,開始演奏出一首完整的歌曲。
主程式:
設定樂器種類,上圖[設定樂器為1] 是鋼琴。
重複執行:演奏歌曲的音樂積木。
製作音樂積木:
[等待讀取數位腳位(2)=0],判斷按鍵是不是有按下按鍵,如果按下按鍵,就進行下一步[彈奏音符…….],發出一個音。
將歌曲音符編排好,當按下按鍵時,就彈奏一個音符。
這樣就可以依序將歌播完。
因為歌曲常常有一些重複的曲段,所以用積木來編排,節省程式長度,比較簡潔。
如果想要變換樂器聲音,只要更改[樂器種類]就可以了。
以小星星為例,主要分成3段,各用了2次。
主程式變得很簡短。
註:如果使用[製作一個積木]來寫程式的好處就是程式比較有規律,修改、除錯都比較容易。
程式下載:按鍵演奏歌曲.sb2
延伸:
1.學生自由創作不同的音樂
2.如何加快音樂節奏?
3.增加一條麵包線連接數位腳位8和蜂鳴器,使用蜂鳴器來演奏樂曲。
————————–
註:
讀取資料時,常常因為受到環境雜訊的影響,會發生讀取訊號不穩定的現象(有時讀取到 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