☛ 功能說明

利用 Arduino 開發板 PWM 訊號輸出接腳 5、6、9、10 控制四個 LED 亮度變化並依序單燈右移,每一個 LED 亮度由暗逐漸變亮,再由亮逐漸變暗後,再右移至下一個 LED。 LED 亮度由 PWM 信號控制,當 PWM 信號工作週期增加時,LED 亮度增加,反之當 PWM 信號工作週期減小時,LED 亮度變小。

☛ 使用材料

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

☛ 電路圖及麵包板接線圖

☛ 程式碼

const int led[]={5,6,9,10};                          //LED 連接至 PWM 接腳 5、6、9、10
int brightness=0;                                    //LED 亮度
int lighten=5;                                       //LED 亮度變化量
int i=0;                                             //LED 輪流索引
void setup() {
}
void loop() {

     if(i<4)                                         //LED 右移至最右?
     {
        Bright_Dark();                               //LED 明暗變化副程式
        i++;                                         //切換至下一個接腳
     }
     else
     {
        i=0;                                         //回到最左的 LED
     }
    
}

void Bright_Dark()                                   //LED 明暗變化副程式
{
     for(brightness=0;brightness<=250;brightness+=5) //LED 最暗變化至最亮
     {   
         analogWrite(led[i],brightness);
         delay(50);                                  //延遲 50ms
     }

     for(brightness=250;brightness>=0;brightness-=5) //LED 最亮變化至最暗
     {   
         analogWrite(led[i],brightness); 
         delay(50);
     }
}

 

☛ 練習

㈠ 設計 Arduino 程式,控制四一個 LED 亮度變化並依序左移。 每一個 LED 亮度由暗逐漸變亮,再由亮逐漸變暗。

const int led[]={5,6,9,10};                          //LED 連接至 PWM 接腳 5、6、9、10
int brightness=0;                                    //LED 亮度
int lighten=5;                                       //LED 亮度變化量
int i=3;                                             //LED 輪流索引
void setup() {
}
void loop() {

     if(i>=0)                                        //LED 左移至最左?
     {
        Bright_Dark();                               //LED 明暗變化副程式
        i--;                                         //切換至下一個接腳
     }
     else
     {
        i=3;                                         //回到最右的 LED
     }
    
}

void Bright_Dark()                                   //LED 明暗變化副程式
{
     for(brightness=0;brightness<=250;brightness+=5) //LED 最暗變化至最亮
     {   
         analogWrite(led[i],brightness);
         delay(50);                                  //延遲 50ms
     }

     for(brightness=250;brightness>=0;brightness-=5) //LED 最亮變化至最暗
     {   
         analogWrite(led[i],brightness); 
         delay(50);
     }
}

 

㈡ 設計 Arduino 程式,控制四一個 LED 亮度變化並依序來回左右移。 每一個 LED 亮度由暗逐漸變亮,再由亮逐漸變暗。

const int led[]={5,6,9,10};                          //LED 連接至 PWM 接腳 5、6、9、10
int brightness=0;                                    //LED 亮度
int lighten=5;                                       //LED 亮度變化量
int i=3;                                             //LED 輪流索引
int direct=0;                                        //LED 方向
void setup() {
}
void loop() {

     if(direct==0)
     {
        if(i>=0)                                     //LED 左移至最左?
        {
           Bright_Dark();                            //LED 明暗變化副程式
           i--;                                      //切換至下一個接腳
        }
        else
        {
           i=0;                                      //已經移動到最左的 LED
           direct=1;                                 //改為 LED 右移
        }
     }
     else
     {
        if(i<4)                                      //LED 右移至最右?
        {
           Bright_Dark();                            //LED 明暗變化副程式
           i++;                                      //切換至下一個接腳
        }
        else
        {
           i=3;                                      //已經移動到最右的 LED
           direct=0;                                 //改為 LED 左移
        }      
     }

}

void Bright_Dark()                                   //LED 明暗变化副程序
{
     for(brightness=0;brightness<=250;brightness+=5) //LED 最暗變化至最亮
     {   
         analogWrite(led[i],brightness);
         delay(50);                                  //延遲 50ms
     }

     for(brightness=250;brightness>=0;brightness-=5) //LED 最亮變化至最暗
     {   
         analogWrite(led[i],brightness); 
         delay(50);
     }
}