☛ 功能說明

利用 Arduino 開發板 PWM 訊號輸出接腳 5、6、9、10 控制四個 LED 產生右移雨滴變化。

☛ 使用材料

Arduino UNO R3 開發板 × 1、電阻 220Ω × 4、紅色 LED × 4。

☛ 電路圖及麵包板接線圖

☛ 程式碼

const int led[]={5,6,9,10};                              //LED 連接至 PWM 接腳 5、6、9、10
int varNums;                                             //LED 變化種類
int ledNums;                                             //LED 亮度種類
const int brightness[7][4]=                              //LED 變化資料
      {   {250,0,0,0},                                   //第 1 次 LED 變化
          {100,250,0,0},                                 //第 2 次 LED 變化
          {50,100,250,0},                                //第 3 次 LED 變化
          {5,50,100,250},                                //第 4 次 LED 變化
          {0,5,50,100},                                  //第 5 次 LED 變化
          {0,0,5,50},                                    //第 6 次 LED 變化
          {0,0,0,5}    };                                //第 7 次 LED 變化

void setup() {
}

void loop() {
     for(varNums=0;varNums<7;varNums++)                  //雨滴燈變化
     {
         for(ledNums=0;ledNums<4;ledNums++)
             analogWrite(led[ledNums],brightness[varNums][ledNums]);
         delay(100);
     }
}

 

☛ 練習

㈠ 設計 Arduino 程式,利用 Arduino UNO 開發板的 PWM 信號輸出接腳 5、6、9、10 控制四個 LED 產生左移雨滴變化。

const int led[]={5,6,9,10};                              //LED 連接至 PWM 接腳 5、6、9、10
int varNums;                                             //LED 變化種類
int ledNums;                                             //LED 亮度種類
const int brightness[7][4]=                              //LED 變化資料
      {   {0,0,0,250},                                   //第 1 次 LED 變化
          {0,0,250,100},                                 //第 2 次 LED 變化
          {0,250,100,50},                                //第 3 次 LED 變化
          {250,100,50,5},                                //第 4 次 LED 變化
          {100,50,5,0},                                  //第 5 次 LED 變化
          {50,5,0,0},                                    //第 6 次 LED 變化
          {5,0,0,0}    };                                //第 7 次 LED 變化

void setup() {
}

void loop() {
     for(varNums=0;varNums<7;varNums++)                  //雨滴燈變化
     {
         for(ledNums=0;ledNums<4;ledNums++)
             analogWrite(led[ledNums],brightness[varNums][ledNums]);
         delay(100);
     }
}

 

㈡ 設計Arduino程式,控制四個LED模擬拖尾霹靂燈變化。

const int led[]={5,6,9,10};                              //LED 連接至 PWM 接腳 5、6、9、10
int varNums;                                             //LED 變化種類
int ledNums;                                             //LED 亮度種類
int direct=0;                                            //LED 變化方向
const int brightness_R[7][4]=                            //右移LED變化資料
      {   {250,0,0,0},                                   //第 1 次 LED 變化
          {100,250,0,0},                                 //第 2 次 LED 變化
          {50,100,250,0},                                //第 3 次 LED 變化
          {5,50,100,250},                                //第 4 次 LED 變化
          {0,5,50,100},                                  //第 5 次 LED 變化
          {0,0,5,50},                                    //第 6 次 LED 變化
          {0,0,0,5}    };                                //第 7 次 LED 變化

const int brightness_L[7][4]=                            //左移 LED 變化資料
      {   {0,0,0,250},                                   //第 1 次 LED 變化
          {0,0,250,100},                                 //第 2 次 LED 變化
          {250,100,50,0},                                //第 3 次 LED 變化
          {250,100,50,5},                                //第 4 次 LED 變化
          {100,50,5,0},                                  //第 5 次 LED 變化
          {50,5,0,0},                                    //第 6 次 LED 變化
          {5,0,0,0}    };                                //第 7 次 LED 變化

void setup() {
}

void loop() {
     for(varNums=0;varNums<7;varNums++)                  //雨滴燈變化
     {
         for(ledNums=0;ledNums<4;ledNums++)
         {
             if(direct==0)                               //雨滴燈左移
                analogWrite(led[ledNums],brightness_L[varNums][ledNums]);
             else                                        //雨滴燈右移
                analogWrite(led[ledNums],brightness_R[varNums][ledNums]);
         }
         delay(100);
     }

     if(direct==0)
        direct=1;
     else
        direct=0;
}