Arduino PWM 實習 (呼吸燈)

學習如何學習!

設備與材料

個人電腦 × 1
arduino Uno × 1
麵包板 × 1
共陽 3色LED × 1
4×4按鍵 × 1
連接線 若干

電路圖

實體接線圖

參考程式

//宣告全域變數
const int rLED =  3;  
const int PB[]= {10,11,12,13};

// 0:滅、1:紅光呼吸燈
byte    mode   = 0 ;


void setup() {
   //設定 LED 接腳為輸出模式
   pinMode(rLED, OUTPUT);

   //設定 按鈕 接腳為上拉電阻輸入模式
   for(int i=0;i<4;i++){
      pinMode(PB[i], INPUT_PULLUP);
   }   
}

void loop() {

    //按 S1   
    if(!digitalRead(PB[0])){
      //滅
      mode =0;
    }  
    //按 S2 
    if(!digitalRead(PB[1])){      
      //紅燈
      mode =1;      
    }  
    
    
    switch(mode){

      case  0:
        digitalWrite(rLED,HIGH);    //共陽LED 高電位 不亮
        break;
        
      //紅光調光   
      case  1:
        breathingLight(rLED);        
        break;
        
    }      
}

//呼吸燈
void breathingLight(int led){
    for(int i=0;i<256;i+=5){
      //如果 S1 有按
      if(!digitalRead(PB[0])){
         mode =0;
         break; 
      }              
      analogWrite(led,i);  
      delay(50);
    }  
    
    for(int i=255;i>=0;i-=5){
      //如果 S1 有按
      if(!digitalRead(PB[0])){
         mode =0;
         break; 
      }                    
      analogWrite(led,i);  
      delay(50);
    }  
}

功能

本實習功能要求如下:
按 S2 紅色 LED 燈 做呼吸燈
按 S3 藍色 LED 燈 做呼吸燈
按 S4 綠色 LED 燈 做呼吸燈
按 S1 所有燈滅

相關知識

PWM 控制
三色LED
byte
INPUT_PULL
analogWrite 函式
switch 選擇指令
Arduino 布林運算子
自定函數
if 判斷式
if else 判斷式
digitalRead 函式
boolean
陣列
for 迴圈
Arduino 複合運算子
const
Arduino Uno 硬體
int
void
setup 函數
loop 函數
pinMode 函數
digitalWrite 函數
delay 函數

入門
知識
語法
流程
函式
實習

發佈留言