연구노트/아두이노 강좌

07장 삼색 LED 사용하기

생존형수동개발자 2021. 1. 12. 23:56

 

삼색 LED

삼색 LED

  • 하나에 LED에서 빨강, 파랑, 초록의 색을 낼 수 있다.
  • 4개의 다리는 빨강, 파랑, 초록, 그라운드이며 전압을 조절해 색을 조합할 수 있다.

버튼으로 색 바꾸기

*교재랑은 다른 코드로 작성함

회로 구성

  • 버튼 입력을 읽어서 LED의 RGB를 켜도록 만들어보자
bool r = false, g = false, b = false;

void setup() {
  Serial.begin(9600);
  
  //2,3,4번으로 버튼입력 감지
  pinMode(4, INPUT);
  pinMode(3, INPUT);
  pinMode(2, INPUT);

  //9,10,11번으로 LED 출력
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode( 9, OUTPUT);

  //LED 전체 OFF
  digitalWrite(11, b);
  digitalWrite(10, g);
  digitalWrite( 9, r);
}

void loop() {
  if (digitalRead(4) == HIGH) {
    delay(300);	//채터링 코드
    b ^= true;
  }
  if (digitalRead(3) == HIGH) {
    delay(300);	//채터링 코드
    g ^= true;
  }
  if (digitalRead(2) == HIGH) {
    delay(300);	//채터링 코드    
    r ^= true;
  }

  Serial.print("r:"); Serial.println(r);
  Serial.print("g:"); Serial.println(g);
  Serial.print("b:"); Serial.println(b);

  //true일때 LED ON
  digitalWrite(11, b);
  digitalWrite(10, g);
  digitalWrite( 9, r);
}
  • 이 코드에서는 버튼을 누를 때마다 켰다껏다하기 위해서 XOR(^) 연산을 넣었다.
    •  0 ^ 0 = 0 
    •  0 ^ 1 = 1 
    •  1 ^ 0 = 1 
    •  1 ^ 1 = 1 
  • 회로상에서 버튼입력을 받을 때 물리적으로 채터링 현상이 생기는데 이를 방지하기 위해 delay(300)을 추가하였다.
    • 단순히 delay를 추가하는 것은 가장 쉬운 방법이지만 delay만큼 아두이노가 정지하는 문제가 있다.
    • 추후 더 정확한 방법 포스팅
  • 결과 버튼을 한번 누르면 켜지고 다시 누르면 꺼짐

 

 자동으로 색 바꾸기

회로 구성

  • 1초마다 색이 랜덤으로 변하는 3색LED
  • random함수를 이용해 색을 무작위로 변화시킨다.
void setup() {
  randomSeed(analogRead(A0));
}

void loop() {
  analogWrite(11, random(256));
  analogWrite(10, random(256));
  analogWrite(9, random(256));
  delay(1000);
}
  • randomSeed(시드값)
    • random함수를 사용할 때 시드 값이 없다면 항상 같은 배열의 랜덤 값이 나온다
    • analogRead(A0)를 사용하는 이유는 사용하지 않는 아날로그 핀의 값을 읽으면 플로팅 현상으로 인해 0~1023 랜덤한 값을 넣을 수 있다.
  •  random(최댓값)
    • 최댓값을 256으로 하면 0~255의 숫자 중 랜덤한 값을 반환한다.

랜덤출력하는 LED

아두이노 사용 시 주의사항

  • 디지털핀 0, 1번은 사용하지 말자
    • 0, 1번은 시리얼 통신으로 사용하기 때문에 중복되면 아두이노 업로드 시 에러가 발생한다.
  • 5V에서 GND로 바로 연결하지 말자
    • 아두이노 보드가 견딜 수 있는 최대 전류는 200mA로서 전원을 직접 그라운드로 연결하면 보드가 사망한다.
    • 회로 연결은 보드가 OFF상태에서 연결하는 것이 BEST