專題-S4A-達標計分器--基礎數位輸出輸入的練習
本主題可用於運動計數、分組計分…。
材料:(本教案使用預設為粗體設備)
1.
Arduino開放式硬體,建議預先上傳好S4A韌體
2.
感測器擴充板,V4或V5均可使用,有擴充板接線比較簡單,無擴充板也能使用
3.
按鈕模組(按下為false)、碰撞模組、紅外線模組均可使用(※模組使用不同程式寫法稍有差異)
4.
LED模組、人魚燈LED模組、RGB全彩LED模組(共陰)、七彩燈模組均可使用,或以LED+220歐姆電阻取代(※模組使用不同電路連接稍有差異)。
5. 雙母頭杜邦彩虹排線
準備工作:
=========================================================================
開始上課!
連接本專題Arduino硬體與模組如下圖
按鈕模組連接電路說明
按鈕模組為數位輸入,因此其訊號輸出(OUT)要接到Arduino的輸入端,可接到D2(或D3),擴充板則接在S2(或S3),S代表信號的意思,就是Arduino板子上的數位輸出入D0-D13,裡面的D2和D3在S4A裡被用來做數位輸入偵測,連接腳位如下:
按鈕模組
Arduino
======= ======
OUT ←→ S2(D2)
VCC ←→ V(5V)
GND ←→ G(GND)
RGB全彩LED連接電路說明
RGB全彩LED模組有分共陽或共陰,接線和控制方法各有不同,本例以比較直覺之共陰極模組為主,除了“-”即為接地GND外,另三隻接腳分別為三原色的控制訊號,我們把它分別接至擴充板上的S10、S11、S13,也就是Arduino板上的D10、D11、D13,連接腳位如下:
RGB模組 Arduino
======= =======
- (GND) ←→ G(GND)
R(RED) ←→ S13(D13)
G(GREEN) ←→ S11(D11)
B(BLUE) ←→ S10(D10)
====================================================================================
按鈕程式測試、撰寫與說明
以數位輸入用法(本專題將以此為範例):
本專題將按鈕輸入接在Arduino的D2數位輸入接腳,因此在S4A中請觀察sensor
board上的Digital2欄位的值,當我們未按下按鈕時值為true,而按下按鈕時值變為false(※每批模組不同,有的恰恰相反),這樣的方式將按鈕視為數位輸入,寫程式時就要用數位輸入的方法來判斷,例如下列程式會在按下按鈕時發出Do的鋼琴聲。
類比輸入用法:
如果你將按鈕模組接到類比輸入A0~A5也能用,但是這時就要觀察Sensor board上Analog0~5的數字,例如:我如果將它接在A0輸入,那你會發現沒按按鈕,A0值為1023,有按按鈕,A0值變成0,因此上面的程式就會變成這樣的寫法,必須找一個可以分辨出1023和0的中間的任何值(本例用500最為哨兵值,非一定要用500),利用大於小於,甚至是等於來做判斷。
LED程式的測試、撰寫與說明
數位控制三原色輸出(本專題將以此為範例):
LED使用數位方式點亮的話,僅有兩種狀態,意即亮或不亮,而本次使用的RGB全彩彩LED,如果以數位方式控制的話,除了接地腳外,控制腳位接在Arduino的D10/11/13(S4A1.5版以後D12也能使用),則顏色會有2*2*2=8種顏色(包含全滅)。
下圖程式即是將三原色以0.1秒的時間間隔輪流點亮(未混色)。
下面程式則是數位方式隨機混色輸出
PWM控制三原色全彩輸出:
如果想要全彩輸出,腳位得接在D5/6/9,則可利用PWM(脈波頻寬調變)給予0~255階不同的亮度,因此3隻控制接腳即可以256*256*256呈現16777216色組合,就是全彩的意思。下方程式即是以每0.1秒的間隔,隨機混和1677萬色全彩輸出,色彩的組合可以參考網路查詢“RGB配色表”。
=====================================================================
“達標計分器”專題實作開始:
本達標計分器可用於教師分組學習時為每組學生計分,每組使用1個按鈕1個顏色的燈,因此1片Arduino、6個按鈕、2顆RGB全彩燈即可做成六組的達標計分器,本專題僅以一組為例,可自行延伸。
一開始可設定本次目標分數,然後課程進行中小組得分即可按鈕1次加1分,如果達標就會燈光閃爍加響鈴大作恭賀一番。
先新增一個變數“達標分數”,然後在程式中以提問積木將達標分數設定進來。
(本程式有誤,其實不需用到變數,迴圈裡也不用減一,請等待下次修正程式)
做一個迴圈,設定執行次數為達標分數,每次在按鈕狀態切換時(由沒按→有按),就將達標數減去1,因此如果達標分數為10分,本迴圈就會執行10次,執行完10次達標分數就會變成零,迴圈也會結束,此時利用廣播積木將訊號“恭喜達成目標”傳送出去。
利用廣播積木的原因是因為要讓文字、音樂、控制LED的動作同時多工發生,所以我們分別將文字、音樂、控制LED的動作設定在個別的接收廣播中,以達到多工的作用,聲音或音樂可先由聲音資料庫中匯入或自行錄音準備好如下圖。
廣播部分程式如下:
然後我們可再增加,當我們每次按鈕時也閃兩下燈,再播點音效以增加互動趣味性,這樣就完成我們的程式了!最後程式就如下圖。
是不是很有趣呢?