#include <IRremote.h> //적외선 통신 라이브러리 추가
#include <MsTimer2.h>
const int irReceiverPin = 2; //적외선센서
const int Rled = 9; //빨간LED
const int Gled = 10; //초록LED
const int Bled = 11; //파랑LED
const int buzzer= 12; //부저
boolean lightState = false; //LED의 상태를 저장하기위한 변수
int led=9; //현재 어떤 LED(9,10,11)가 켜져있는지를 기억하기위한 변수
unsigned long last = millis(); //remember when we last received an IR message
int nextled=9; //다음에 켜질 LED(9,10,11)를 기억하기위한 변수
int brightness = 0; //밝기값
int fadeAmount = 5; //증감값
IRrecv irrecv(irReceiverPin); //IRrecv 오브젝트 생성
decode_results decodedSignal; //리모컨 적외선 value값
boolean flag = true;
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
;
}
pinMode(Rled, OUTPUT);
pinMode(Gled, OUTPUT);
pinMode(Bled, OUTPUT);
pinMode(buzzer, OUTPUT);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&decodedSignal) == true)
{
if(decodedSignal.value==0xFFA25D){ //리모컨의 전원버튼이 눌렸을때 RGB LED를 다킴!
lightState = !lightState;
if(lightState==true){
Serial.print("$CLEAR\r\n");
Serial.print("$GO 1 4\r\n");
Serial.print("$PRINT LED ON\r\n");
}
else{
Serial.print("$CLEAR\r\n");
Serial.print("$GO 1 4\r\n");
Serial.print("$PRINT LED OFF\r\n");
delay(1000);
Serial.print("$CLEAR\r\n");
}
digitalWrite(Rled,lightState);
digitalWrite(Gled,lightState);
digitalWrite(Bled,lightState);
}
if(decodedSignal.value==0xFF22DD && lightState==true){ //리모컨의 재생버튼을 누를때마다 R,G,B순으로 LED를 하나씩 켬!
digitalWrite(Rled,!lightState);
digitalWrite(Gled,!lightState);
digitalWrite(Bled,!lightState);
digitalWrite(nextled,lightState);
Serial.print("$CLEAR\r\n");
Serial.print("$GO 1 4\r\n");
Serial.print("$PRINT Light Mode\n");
Serial.println(nextled);
led=nextled; //현재 켜져있는 LED를 따로 저장함
nextled=nextled+1;
if(led==11) //현재 켜진 LED가 파랑이면 다음 켜질LED를 다시 빨강으로 초기화
nextled=9;
}
if(decodedSignal.value==0xFF629D && lightState==true){ //리모컨의 MODE버튼을 누를때 analogWrite를 이용하여 LED를 서서히 밝아졌다가 서서히 줄어들게 함!
Serial.print("$CLEAR\r\n");
Serial.print("$GO 1 3\r\n");
Serial.print("$PRINT Mood LED Mode\n");
if(flag){
Serial.println(nextled+100);
MsTimer2::set(30,ModeTest);
MsTimer2::start();
}else{
Serial.println(nextled+200);
MsTimer2::stop();
}
flag = !flag;
}
//버튼이눌릴때마다 부저가 띠띡! 하고 울림
digitalWrite(buzzer,HIGH);
delay(50);
digitalWrite(buzzer,LOW);
delay(50);
digitalWrite(buzzer,HIGH);
delay(50);
digitalWrite(buzzer,LOW);
//버튼의 value값을 알아내기위해 필요한 문장
Serial.print("value=");
Serial.println(decodedSignal.value, HEX);
irrecv.resume();
}
}
void ModeTest(){
Serial.println(led);
analogWrite(led, brightness);
brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 255)
fadeAmount = -fadeAmount ;
}
소스는 이렇고
if(decodedSignal.value==0xFF629D && lightState==true)
안으로들어가면 현재 켜져있는 LED의 빛이 서서히 빛났다가 흐려지는 동작을 반복하는데
9,10번핀에 꽂은 빨강 초록 LED는 정상작동을합니다
그러나 11번핀에 꽂은 파랑 LED는 한번 켜졌다가 꺼지는것만 반복하더군여 왜이러나요;;;;
제아두이노 보드에 11번핀도 분명 ~ 표시가 있고 연결잘못한건 없는데말이죠....
|