티스토리 뷰

    앞서 LED를 켜고 끄는 것을 배웠습니다. 이번에는 서서히 켰다가 끄겠습니다. 영어로는 Fading LED란 기능입니다. LED에 흐르는 전류 크기에 따라 LED에서 나오는 빛의 세기가 결정됩니다. 따라서 LED의 밝기를 서서히 조절하기 위해서는 아두이노 PWM 핀의 전압을 서서히 올리고 내리면 됩니다. 

완성된 회로

<그림 1> 3색 LED 연결

    Common Cathode LED는 공통단자가 GND에 연결됩니다. Common Anode LED는 공통단자가 5V에 연결됩니다.

완성된 코드


Common Cathode

int ledRed = 11;
int ledGreen = 10;
int ledBlue = 9;
const int fade = 10;  //delay time

void setup() {
  pinMode(ledRed, OUTPUT);
  pinMode(ledGreen, OUTPUT);
  pinMode(ledBlue, OUTPUT);
}

void loop() {  
   
   //ledRed
  for (int i = 0; i <= 255; i++) { //RED LED fade in
    analogWrite(ledRed, i);
    delay (fade);
  }
  for (int i = 255; i >= 0; i--) {  //RED LED fade out
    analogWrite(ledRed, i);
    delay (fade);
  }

  //ledGreen
  for (int i = 0; i <= 255; i++) { //GREEN LED fade in
    analogWrite(ledGreen, i);
    delay (fade);
  }
  for (int i = 255; i >= 0; i--) {  //GREEN LED fade out
    analogWrite(ledGreen, i);
    delay (fade);
  }

  //ledBlue
  for (int i = 0; i <= 255; i++) {  //BLUE LED fade in
    analogWrite(ledBlue, i);
    delay (fade);
  }
  for (int i = 255; i >= 0; i--) {  //BLUE LED fade out
    analogWrite(ledBlue, i);
    delay (fade);
  }
}

    for 문을 이용해서 i를 최소 값 0 부터 최대 값 255까지 증가 시켰습니다. 해당하는 색깔의 LED에 걸리는 전압은 0V 부터 서서히 증가합니다. 그 후 다시 255 부터 0까지 감소 시킵니다. 


Common Anode

int ledRed = 11;
int ledGreen = 10;
int ledBlue = 9;
const int fade = 10; // delay time

void setup() {
  pinMode(ledRed, OUTPUT);
  pinMode(ledGreen, OUTPUT);
  pinMode(ledBlue, OUTPUT);
}

void loop() {  
   
   //ledRed
  for (int i = 0; i <= 255; i++) { //RED LED fade in
    analogWrite(ledRed, 255-i);
    analogWrite(ledGreen, 255);
    analogWrite(ledBlue, 255);
    delay (fade);
  }
  for (int i = 255; i >= 0; i--) {  //RED LED fade out
    analogWrite(ledRed, 255-i);
    analogWrite(ledGreen, 255);
    analogWrite(ledBlue, 255);
    delay (fade);
  }

  //ledGreen
  for (int i = 0; i <= 255; i++) { //GREEN LED fade in
    analogWrite(ledRed, 255);
    analogWrite(ledGreen, 255-i);
    analogWrite(ledBlue, 255);
    delay (fade);
  }
  for (int i = 255; i >= 0; i--) {  //GREEN LED fade out
    analogWrite(ledRed, 255);
    analogWrite(ledGreen, 255-i);
    analogWrite(ledBlue, 255);
    delay (fade);
  }

  //ledBlue
  for (int i = 0; i <= 255; i++) {  //BLUE LED fade in
    analogWrite(ledRed, 255);
    analogWrite(ledGreen, 255);
    analogWrite(ledBlue, 255-i);
    delay (fade);
  }
  for (int i = 255; i >= 0; i--) {  //BLUE LED fade out
    analogWrite(ledRed, 255);
    analogWrite(ledGreen, 255);
    analogWrite(ledBlue, 255-i);
    delay (fade);
  }
}

    Common Anode LED는 전류가 Vcc에서 LED를 거쳐 Digital Pin으로 흐릅니다. Digital 핀에서 신호가 나오면 전류가 흐르지 못해 LED가 켜지지 않습니다. 켜고자 하는 LED에 해당하는 핀의 출력을 없애면 그 LED가 켜집니다. 따라서 켜고 싶은 LED를 (255-i)로 입력하고, 켜지 않는 LED는 255를 입력해야 합니다. RGB LED에 대한 상세한 설명은 아래 글을 참고 바랍니다.

[아두이노] RGB(3색) LED 사용하기


RGB LED Fade 작동 모습

<그림 2> LED Fade 모습


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함