☛ 功能說明

利用一個指撥開關控制四個 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);
      }
}