/* * IR control ----------- 31.10.2011 --- Alexander Revtsov ----------- * ---------------------- http://www.city416.ru ---------------------- This example code is in the public domain. * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv * An IR detector/demodulator must be connected to the input RECV_PIN. * Version 0.1 July, 2009 * Copyright 2009 Ken Shirriff * http://arcfn.com */ #include int RECV_PIN = 2; //IR receiver pin const unsigned long KEY1CODE = 0x20DF906F; const unsigned long KEY2CODE = 0x20DF50AF; const unsigned long KEY3CODE = 0x20DFD02F; const unsigned long KEYUPCODE = 0x20DFE21D; const unsigned long KEYOKCODE = 0x20DFD22D; const unsigned long KEYDOWNCODE = 0x20DF12ED; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); // Serial port to debugging irrecv.enableIRIn(); // Start the receiver pinMode(4, OUTPUT); // Run motors pin pinMode(7, OUTPUT); // Reverse direction pin pinMode(8, OUTPUT); // Light 3 pin pinMode(12, OUTPUT); // Light 2 pin pinMode(13, OUTPUT); // Light 1 pin } int i = 0; int LIGHT1 = 0; int LIGHT2 = 0; int LIGHT3 = 0; unsigned long last = millis(); void loop() { if (irrecv.decode(&results)) { // If it's been at least 1/4 second since the last // IR received, toggle the relay if (millis() - last > 250) { switch (results.value){ case KEYUPCODE: // key UP pressed digitalWrite(4,LOW); delay(500); digitalWrite(7,HIGH); delay(500); digitalWrite(4,HIGH); break; case KEYOKCODE: // key OK pressed (STOP) digitalWrite(4,LOW); delay(500); digitalWrite(7,LOW); break; case KEYDOWNCODE: // key DOWN pressed digitalWrite(4,LOW); delay(500); digitalWrite(7,LOW); delay(500); digitalWrite(4,HIGH); break; case KEY1CODE: // light key 1 LIGHT1 = !LIGHT1; digitalWrite(13, LIGHT1 ? HIGH : LOW); break; case KEY2CODE: // light key 2 LIGHT2 = !LIGHT2; digitalWrite(12, LIGHT2 ? HIGH : LOW); break; case KEY3CODE: // light key 3 LIGHT3 = !LIGHT3; digitalWrite(8, LIGHT3 ? HIGH : LOW); break; } } last = millis(); if (irrecv.decode(&results)) { Serial.println(results.value, HEX); // debug to serial monitor irrecv.resume(); // Receive the next value } } }