/* 日期:2016.9.1 功能:紅外遙控器控制LED燈 開,關,閃爍,呼吸 元件: 跳線公公頭 * 5 led 220歐電阻 紅外接收管,紅外遙控 接線: 紅外燈面向本身從左到右分別接 IO3 ,GND ,5V LED 負極接GND 正極串聯電阻接 IO5 紅外遙控器鍵盤1-9編碼: FF30CF 1 FF18E7 2 FF7A85 3 FF10EF 4 FF38C7 5 FF5AA5 6 FF42BD 7 FF4AB5 8 FF52AD 9 參考:http://www.arduino.cn/thread-3259-1-1.html */ #include <IRremote.h> int ledPin = 5; int recvPin = 3;//定義紅外接收器的引腳爲3 IRrecv irrecv(recvPin); decode_results results; long KEY_CODE_ONE = 0xFF30CF; long KEY_CODE_TWO = 0xFF18E7; long KEY_CODE_THREE = 0xFF7A85; long KEY_CODE_FOUR = 0xFF10EF; long KEY_CODE_LONG_PRESS = 0xFFFFFFFF; long longPressKey = -1; //長按下的那個鍵 void setup() { pinMode(ledPin, OUTPUT); irrecv.enableIRIn(); // 初始化紅外接收器 Serial.begin(9600); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX);//以16進制換行輸出接收代碼 Serial.println();//爲了便於觀看輸出結果增長一個空行 irrecv.resume(); // 接收下一個值 } //按下1鍵的事件 if (results.value == KEY_CODE_ONE ) { ledOn(ledPin); longPressKey = KEY_CODE_ONE; } //長按1鍵的事件 if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_ONE) { ledOn(ledPin); } //按下2鍵的事件 if (results.value == KEY_CODE_TWO ) { ledOff(ledPin); longPressKey = KEY_CODE_TWO; } //長按 2鍵的事件 if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_TWO) { ledOff(ledPin); } //按下 3 鍵的事件 if (results.value == KEY_CODE_THREE ) { flash(ledPin, 100, 100); longPressKey = KEY_CODE_THREE; } //長按 3 鍵的事件 if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_THREE) { flash(ledPin, 100, 100); } //按下 4 鍵的事件 if (results.value == KEY_CODE_FOUR ) { fadeOn(1000, 5); fadeOff(1000, 5); longPressKey = KEY_CODE_FOUR; } //長按 4 鍵的事件 if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_FOUR) { fadeOn(1000, 5); fadeOff(1000, 5); } } // led亮燈 void ledOn(int ledPin) { digitalWrite(ledPin, HIGH); } // led熄燈 void ledOff(int ledPin) { digitalWrite(ledPin, LOW); } //led閃爍 void flash(int ledPin, long highDuration, long lowDuration) { digitalWrite(ledPin, HIGH); delay(highDuration); digitalWrite(ledPin, LOW); delay(lowDuration); } //呼吸燈On void fadeOn(unsigned int time, int increament) { for (byte value = 0 ; value < 255; value += increament) { Serial.println(value); analogWrite(ledPin, value); delay(time / (255 / 5)); } } //呼吸燈Off void fadeOff(unsigned int time, int decreament) { for (byte value = 255; value > 0; value -= decreament) { Serial.println(value); analogWrite(ledPin, value); delay(time / (255 / 5)); } }