#define DECODE_NEC
#define IR_RECEIVE_PIN 2
#define IR_SEND_PIN 3
#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};
uint16_t sCommand{0}; // Kommandospeicher
IRRawDataType sCommandRaw;
uint8_t sRepeats{0};
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);
Serial.print(F("Ready to Send IR signals "));
Serial.print(F("at pin "));
Serial.println(IR_SEND_PIN);
// set LED-Pins to output
for (auto led : leds) {
pinMode(led, OUTPUT);
}
}
void loop() {
if (IrReceiver.decode()) {
// Save the received code except the one from the "Triangle button".
// This button is used to send the received codes.
if (IrReceiver.decodedIRData.command != 0xA8) {
sCommand = IrReceiver.decodedIRData.command; // Save last received command
sCommandRaw = IrReceiver.decodedIRData.decodedRawData;
}
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;
case 0xA8: // Send last received Data
if (sCommand != 0) {
Serial.print("Sende: 0x"); Serial.print(sCommand, HEX); Serial.print(" Raw:"); Serial.println(sCommandRaw,HEX);
IrSender.sendNEC(0x00, sCommand, sRepeats);
}
break;
default: IrReceiver.printIRResultShort(&Serial);
}
delay(65);
IrReceiver.resume(); // Receive the next value
}
}