☛ 功能說明
利用一個指撥開關控制四個 LED 移位方向。 當開關斷開 ( OFF ) 時,LED 單燈右移; 當開關接通 ( ON ) 時,LED 單燈左移。 LED 行動速度可以由 delay() 函式控制。
☛ 使用材料
Arduino UNO R3 開發板 × 1、電阻 220Ω × 4、紅色 LED × 4、指撥開關 × 1。
☛ 電路圖及麵包板接線圖
☛ 程式碼
const int sw=2; //sw 開關連接至數位接腳 2。 const int led[]={10,11,12,13}; //LED 連接至數位接腳 10 ~ 13。 int i; //索引值,第 i 個 LED。 int j=0; //索引值,第 j 個 LED。 int val; //開關狀態。 void setup() { pinMode(sw,INPUT_PULLUP); //設定數位接腳 2 為輸入模式,使用內部上拉電阻。 for(i=0;i<4;i++) pinMode(led[i],OUTPUT); //設定數位接腳 10 ~ 13 為輸出模式。 } void loop() { val=digitalRead(sw); //讀取開關狀態。 for(i=0;i<4;i++) //關閉所有 LED。 digitalWrite(led[i],LOW); if(val==HIGH) //開關接通 ( ON )? { digitalWrite(led[j],HIGH); //開關接通,執行 LED 單燈右移。 delay(500); //延遲 0.5 秒。 if(j==3) //LED 已經右移至最右方? j=0; //重新設定 LED 位置在最左方。 else //LED 尚未右移至最右方。 j++; //下一個 LED。 } else //開關斷開 ( OFF ),執行 LED 單燈左移。 { digitalWrite(led[j],HIGH); //點亮第 j 個 LED。 delay(500); //延遲 0.5 秒。 if(j==0) //LED 已經右移至最左方? j=3; //重新設定 LED 位置在最右方。 else //LED 尚未右移至最左方。 j--; //下一個 LED。 } }
☛ 練習
㈠ 設計 Arduino 程式,使用一個指撥開關控制四個 LED 移位方向。 當開關斷開 ( OFF ) 時,LED 單燈閃爍右移;當開關接通 ( ON ) 時,LED 單燈閃爍左移。
const int sw=2; //sw 開關連接至數位接腳 2。 const int led[]={13,12,11,10}; //LED 連接至數位接腳 10 ~ 13。 int i; //索引值,第 i 個 LED。 int j=0; //索引值,第 j 個 LED。 int val; //開關狀態。 void setup() { pinMode(sw,INPUT_PULLUP); //設定數位接腳 2 為輸入模式,使用內部上拉電阻。 for(i=0;i<4;i++) pinMode(led[i],OUTPUT); //設定數位接腳 10 ~ 13 為輸出模式。 } void loop() { val=digitalRead(sw); //讀取開關狀態。 for(i=0;i<4;i++) //關閉所有 LED。 digitalWrite(led[i],LOW); if(val==LOW) //開關斷開 ( OFF )? { if(j==3) //LED 已經右移至最右方? j=0; //重新設定 LED 位置在最左方。 else //LED 尚未右移至最右方。 j++; //下一個 LED。 } else //開關接通 ( ON ) ,執行 LED 單燈左移。 { if(j==0) //LED 已經右移至最左方? j=3; //重新設定 LED 位置在最右方。 else //LED 尚未右移至最左方。 j--; //下一個 LED。 } flushing(led[j],500); //LED 閃爍副程式 } void flushing(int led,int sec) //LED 閃爍副程式 { for(int t=0;t<2;t++) { digitalWrite(led,HIGH); //點亮 LED。 delay(sec); //延遲 sec 秒 digitalWrite(led,LOW); //關閉LED。 delay(sec); } }
㈡ 設計 Arduino 程式,使用一個指撥開關控制四個 LED 移位方向。 當開關斷開 ( OFF)) 時,LED 單燈閃爍右移; 當開關接通 ( ON ) 時,目前的 LED 單燈閃爍。
const int sw=2; //sw 開關連接至數位接腳 2。 const int led[]={13,12,11,10}; //LED 連接至數位接腳 10 ~ 13。 int i; //索引值,第 i 個 LED。 int j=0; //索引值,第 j 個 LED。 int val; //開關狀態。 void setup() { pinMode(sw,INPUT_PULLUP); //設定數位接腳 2 為輸入模式,使用內部上拉電阻。 for(i=0;i<4;i++) pinMode(led[i],OUTPUT); //設定數位接腳 10 ~ 13 為輸出模式。 } void loop() { val=digitalRead(sw); //讀取開關狀態。 for(i=0;i<4;i++) //關閉所有 LED。 digitalWrite(led[i],LOW); if(val==LOW) //開關斷開 ( OFF )? { if(j==3) //LED 已經右移至最右方? j=0; //重新設定 LED 位置在最左方。 else //LED 尚未右移至最右方。 j++; //下一個 LED。 } flushing(led[j],500); //LED 閃爍副程式 } void flushing(int led,int sec) //LED 閃爍副程式 { for(int t=0;t<2;t++) { digitalWrite(led,HIGH); //點亮 LED。 delay(sec); //延遲 sec 秒 digitalWrite(led,LOW); //關閉LED。 delay(sec); } }