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값이 단번에 증가 또는 감소됨.
                //그다음 버튼신호를 받을 때 까지의 간격을 둠
}
------------------------------------------------------------------------------ 

작동 영상

두개의 스위치를 이용한 LED 제어다
일단 스위치는 풀업저항으로 설정
누를때마다 밝기를 증가 또는 감소하도록
LED는 PWM출력으로 한다.(아날로그 출력)

소스 스케치
-----------------------------------------------------------------------------------------
/*LED 2button*/
int onPin = 2;    //on스위치 연결핀
int offPin = 3;   //off스위치 연결핀
int ledPin = 9;   
int val = 0;   //LED밝기 값 변수

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

/*함수*/
constrain(val,a,b); 는 val 값을 a~b사이의 값으로 제한한다
즉 val값이 a보다 작아지면 a값으로 b보다 커지면 b값을 반환 한다.

작동영상

'아두이노_프로세싱 > 아두이노' 카테고리의 다른 글

soft potentiometer + RGBLED  (0) 2012.06.26
RGB LED  (0) 2012.06.26
FND  (0) 2012.06.26
74hc595 shift register를 이용한 아두이노 포트 확장  (0) 2012.06.26
서보모터 제어  (0) 2012.06.26

FND


FND는 LED 7개를 8자로 배열한 전기소자로 
공통 애노드형과 공통 캐소드형이 있다.


공통 애노드형은 7개의 LED +를 공통으로 묶어 놓은 것으로 각 핀에 '0'입력되어야 불이 켜진다.
공통 캐소드형은 7개의 LED -를 공통으로 묶어 놓은 것으로 각 핀에 '1'입력되어야 불이 켜진다.

+ Recent posts