본문 바로가기
아두이노_프로세싱/아두이노

RGB LED

by 돌돌쌤 2012. 6. 26.

RGB LED  
하나의 LED에 RGB색을 모두 낼수 있다.
저항과 함께 연결하는 방법 및 각 핀에서 내는 색은 아래 그림을 참고한다.
그리고 보통 저항은 330ohm을 연결한다(그림에선 값이 다르지만)



아래 소스는 3개의 버튼을 이용하여
버튼을 누룰때마다 각 색의 밝기가 증가하도록 작성하였다.

스케치소스
-------------------------------------------------------------------------
/*RGBled*/
int redb = 2;    //red버튼 연결핀
int greenb = 3;   //green버튼 연결핀
int blueb = 4;    //blue버튼 연결핀
int redPin = 9; //pwm
int greenPin = 10;  //pwm
int bluePin = 11;  //pwm
int redval = 0;  // 각 색의 버튼에 의해 증가 감소되는 밝기 값
int greenval  = 0;
int blueval = 0;

void setup(){
  pinMode(redb, INPUT);   // red스위치 입력 설정
  pinMode(greenb, INPUT);  // green스위치 입력 설정
  pinMode(blueb, INPUT);  // blue스위치 입력 설정
  digitalWrite(redb, HIGH);  //풀업저항 스위치 설정
  digitalWrite(greenb, HIGH); //풀업저항으로 스위치가 눌러졌을때 LOW
  digitalWrite(blueb, HIGH);
}
void loop(){
  if(digitalRead(redb)==LOW){
    redval++;
    greenval--;
    blueval--;
  }  
  if(digitalRead(greenb)==LOW){
    redval--;
    greenval++;
    blueval--;
  }
  if(digitalRead(blueb)==LOW){
    redval--;
    greenval--;
    blueval++;
  }
  redval = constrain(redval, 0,255);
  greenval = constrain(greenval, 0,255);
  blueval = constrain(blueval, 0,255);  //아두이노가 아날로그값을 출력할때 0~5V를
                                 // 0~255단계로 출력함. 따라서 val값을 0~255까지로 제한
  analogWrite(redPin, redval);
  analogWrite(greenPin, greenval);
  analogWrite(bluePin, blueval);  // led 아날로그 출력
  delay(20);    //delay를 주지 않으면 사람이 버튼을 한번 누른다고 생각하지만
                //전기적으로는 신호가 여러번 보내져 val값이 단번에 증가 또는 감소됨.
                //그다음 버튼신호를 받을 때 까지의 간격을 둠
}
------------------------------------------------------------------------------ 

작동 영상