#define DECODE_NEC
#define IR_RECEIVE_PIN 2
#if !defined(RAW_BUFFER_LENGTH)
// Maximum length of raw duration buffer. Must be even. 100 supports up to 48 bit codings inclusive 1 start and
// 1 stop bit.
#define RAW_BUFFER_LENGTH 100 \
// #define RAW_BUFFER_LENGTH 112 // MagiQuest requires 112 bytes.
#endif
#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program space.
#define EXCLUDE_EXOTIC_PROTOCOLS // saves around 650 bytes program space if all other protocols are active
#include <IRremote.hpp>
// Give the pin numbers a descriptive name (Pins 5,6 and 7)
enum Led : uint8_t {green, blue, white}; // https://en.cppreference.com/w/cpp/language/enum
uint8_t leds[] {5,6,7};
void setup()
{
Serial.begin(115200);
delay(1000);
Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));
Serial.println(F("Enabling IRin..."));
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
Serial.print(F("Ready to receive IR signals of protocols: "));
printActiveIRProtocols(&Serial);
Serial.print(F("at pin "));
Serial.println(IR_RECEIVE_PIN);
// set LED-Pins to output
for (auto led : leds) {
pinMode(led, OUTPUT);
}
}
void loop() {
if (IrReceiver.decode()) {
switch (IrReceiver.decodedIRData.command) {
case 0x30: Serial.println("1"); // Button 1
digitalWrite(leds[Led::green], HIGH);
break;
case 0x18: Serial.println("2"); // Button 2
digitalWrite(leds[Led::green], LOW);
break;
case 0x7A: Serial.println("3"); // Button 3
digitalWrite(leds[Led::blue], HIGH);
break;
case 0x10: Serial.println("4"); // Button 4
digitalWrite(leds[Led::blue], LOW);
break;
case 0x38: Serial.println("5"); // Button 5
digitalWrite(leds[Led::white], HIGH);
break;
case 0x5A: Serial.println("6"); // Button 6
digitalWrite(leds[Led::white], LOW);
break;
default: IrReceiver.printIRResultShort(&Serial);
}
delay(65);
IrReceiver.resume(); // Receive the next value
}
}