Arduino第四課(3顆LED紅綠燈)
增加為紅 、黃、綠三顆LED
紅色LED,正極接Arduino板數位腳位11
黃色LED,正極接Arduino板數位腳位10
綠色LED,正極接Arduino板數位腳位9
控制數位腳位9、10、11的輸出為高電位(5V)或低電位(0V)。來控制三種顏色LED的亮或熄滅。
0.檢查接線
設定[腳位9模式為OUTPUT]、 [腳位10模式為OUTPUT]、 [腳位11模式為OUTPUT],設定數位腳9、10、11為輸出。
設定[腳位9、10、11輸出1](高電位),讓三顆LED亮。
如果沒有亮,先檢查是否斷線了,再檢查是否接線有錯(LED正負極方向是否正確)。
一、使用鍵盤按鍵來控制LED
注意:
記得先檢查[輸入法]是否為[英],當輸入法不對時,鍵盤按鍵對應的值是錯的,無法正確反應動作。
按鍵盤上的[a]鍵讓綠色LED燈亮,鬆開[a]鍵讓綠色LED燈熄滅。
按鍵盤上的[空白鍵]讓紅色LED燈亮,鬆開[空白鍵]讓紅色LED燈熄滅。
按鍵盤上的[向上移]讓黃色LED燈亮,鬆開[向上鍵]讓黃色LED燈熄滅。
程式設計請參考上一節修改
二、搶答
1.甲、乙、丙三隊搶答,先按的亮燈,後按的燈不亮。
紅隊按[空白鍵]讓紅色LED燈亮,黃隊按[向上鍵]讓黃色LED燈亮,綠 隊按[a]鍵讓綠色LED燈亮。
程式設計請參考上一節修改
2.螢幕上加上倒數計時,時間到,再搶答。
3.螢幕上隨機出現搶答畫面(加上聲音),看(聽)到再搶答。
三、十字路口紅綠燈
a.綠、黃、紅LED輪流亮
1.[腳位(…)模式為(OUTPUT)],設定數位腳9、10、11為輸出。
2.[數位輸出:設定腳位…為1],讓數位腳9、10、11輸出為高電位,LED燈亮
3.[等待1秒],讓亮燈維持一秒
4.設定[數位輸出:設定腳位….為0],讓數位腳…輸出為 低電位,LED燈熄滅
5. 輪流讓數位腳9、10、11輸出高、低電位,就可以讓綠、黃、紅LED燈輪流亮、滅的閃爍。
6. 加上[重複執行],就可以無限循環這個綠、黃、紅LED燈輪流閃爍。
程式下載:綠黃紅閃燈.sb2
延伸:
1.請學生想想要如何改變閃爍(亮、滅)時間?
2.燈愈多,程式愈長,請學生想一想可不可以縮短程式?
b. 模擬十字路口
將上一個練習的LED燈等待時間調整,就可以模擬十字路口的紅綠燈號了。
程式下載:紅綠燈.sb2
c.紅燈時,螢幕要顯示倒數計時(模擬十字路口)
主要程式同上面的練習。
在紅燈的部分增加顯示倒數計時的改變。
增加一個[紅燈倒數]的變數。
一開始隱藏變數不要顯示,等輪到紅燈再顯示。
紅燈時,先設定變數值紅燈的倒數秒數(10秒),然後在螢幕上顯示變數,設數位腳11的紅燈輸出為1(高電位),將紅燈點亮。
等待一秒後,將變數值減1
重複10次後,隱藏變數,設數位腳11的紅燈輸出為0(低電位),紅燈熄滅。
程式下載:紅燈倒數.sb2
d. 紅、綠燈時,螢幕都要顯示倒數計時
主要程式同上面的練習。
在綠燈的部分增加顯示倒數計時的改變。
增加一個[綠燈倒數]的變數。
程式下載: 紅綠燈倒數.sb2
延伸:
設計一個紅綠燈圖示,模擬紅綠燈的運作,配合燈號做顏色變換。
四、隨機閃燈
綠、黃、紅LED隨機點亮又熄滅
增加一個[亮燈]的變數。
[設定變數(亮燈)為(在9到11間隨機選一個變數)],將變數值設定為9到11之間的隨機變數。
設定[亮燈]變數的腳位輸出為1(高電位),將燈點亮。
等待一秒後,將[亮燈]變數的腳位輸出為0(低電位),將燈點熄滅。
然後重複這個[變數改變]、[亮燈]、[熄滅]。
程式下載: 隨機閃燈.sb2
延伸:
1.改變等待時間,讓隨機閃燈的時間改變。
2.上面程式特地加了一個[亮燈]變數為9~11隨機選一個數,如果不要做這個變數設定,直接將9~11隨機選一個數放進腳位輸出,可以嗎?
為什麼?
程式下載:隨機閃燈0.sb2
延伸:
燈號改變時,螢幕上顯示相對應的腳色顏色。(例如:綠燈亮時,螢幕上也同時亮綠色燈)
五、學生創作:
1.提供多組材料讓學生自由創作
2.學生尋求其他組同學合作創作更多元的作品
3.十字路口有4組紅綠燈一起動作。
4.更多隊伍(5隊、6隊)的搶答系統
5.用LED編排圖形、文字
6.模擬廣告看板
7.打地鼠(看到紅色燈亮按R鍵、黃色燈亮按Y鍵、綠色燈亮按G鍵,按對計分)
8.時鐘
9.霹靂燈:
接很多LED燈排成一排,讓這些LED燈輪流一顆顆的閃亮過去。
9.1 請學生想想如何可以接更多LED燈?
從數位腳位D0~D13,共有14個數位輸出的位置,可以接14顆LED。
可是大家常用的是D2~D13可以接12顆LED,為什麼D0和D1不用?
因為程式執行時D0和D1負責傳輸訊號,這時接在D0和D1的LED會跟著訊號傳輸亂閃。
9.2 請學生想想可以接更多LED燈嗎?
類比腳A0~A5一般用來接受類比電壓輸入,也可以當作數位輸出的數位腳D14~D19,所以可以接上LED。
這樣數位輸出最多就可以從D2~D19接18顆LED
9.3 同時接18顆LED,如果用前面練習時寫程式的方法,寫出來的程式會很長一串,想想看如何用簡短的程式來控制這麼多顆LED?
9.4 同時接18顆LED,也必須同時接18顆電阻,有沒有辦法簡化?
因為同一時間只有一個燈會亮,所以可以將系統簡化,只接一顆電阻
接線圖
將18顆LED的短腳(負極)接麵包板同一邊,再串接串接220歐姆電阻後接地(GND)。
18顆LED的長腳(正極)分別接D2~D13和A0~A5,由這18個腳位來控制輸出電位,讓LED亮或滅。
將原來是類比輸入的A0~A5也當成數位輸出的D14~D19
a.18顆LED輪亮
設定變數[亮燈]來決定該輪到哪一顆LED燈要亮。
重複18次[腳位(…)模式為OUTPUT],將D2到D19設定為數位輸出
重複18次[腳位(…) 數位輸出1]、[等待0.1秒]、[腳位(…)數位輸出0],讓D2到D19輪流亮、滅
[重複執行],讓上面LED亮、滅的動作重複進行。
程式下載:18顆LED輪亮.sb2
b.18顆LED來回亮
前面的程式讓LED輪流閃過,改變一下,變成讓LED來回閃爍
請學生思考有18顆LED,為什麼重複執行只有17次?
試試看改變重複執行為18次,觀察有什麼不一樣?
程式下載:18顆LED來回亮.sb2
延伸:
1.如果將[腳位(…)數位輸出1]、[等待0.1秒]、[腳位(…)數位輸出0]的[等待0.1秒]移除,結果有什麼不同?
2.可以讓程式更簡短嗎?再加入一個迴圈?
3.除了上面兩種霹靂燈的模式,試試看如何可以讓他有更多種變化?
111.2.17更新
10.光立方
將27顆LED燈排列成3X3X3的立方體形狀,同一層的9顆LED負極焊接在一起,同一列的3顆LED正極焊接在一起。
所以三層有3組GND接頭,搭配一層9組正極,就可以用12個腳位來控制27顆LED燈了。
依序將正極接在數位腳D2~D10,負極接在數位腳D11~D13
設定變數[亮燈]來決定該輪到哪一列LED正極要輸出1。
設定變數[GND]來決定該輪到哪一層LED負極要輸出0。
重複12次[腳位(…)模式為OUTPUT],將D2到D13設定為數位輸出
要點亮LED,必須正極要輸出1,負極要輸出0
如果負極輸出為1,正極輸出為1或0都不會亮;控制GND的輸出來決定同一列中,哪一顆(哪一層)LED要亮。
用如果[ (…)就 … ]來控制負極D11~D13的輸出。
搭配D2~D10的[腳位(…)數位輸出1]、[等待0.1秒]、[腳位(…)數位輸出0],讓D2到D10輪流輸出1和0,就可以讓27顆LED依序閃亮起來。
程式下載:光立方.sb2
將輸出1和輸出0中間的等待時間去掉,閃亮速度更快
光立方(亂閃)
將GND和亮燈變數都用[隨機選一個數]來決定。
程式下載:光立方亂閃.sb2