#define DECODE_NEC            // DECODE_NEC
#include <IRremote.hpp>       // Do not change header order.

constexpr uint8_t RECV_PIN {2};
constexpr uint8_t LED {12};

enum State {OFF, ON} state;

//const uint32_t s1 = 1082110031;
const uint16_t s1 = 0x38;  // Taste 5

void setup()
{
  Serial.begin(9600);

  pinMode (LED, OUTPUT);    // Lüfter

  digitalWrite (LED, HIGH);
  // digitalWrite(5, HIGH);
  // digitalWrite(4, HIGH);

  IrReceiver.begin(RECV_PIN);
  Serial.print(F("Ready to receive IR signals at pin "));
  Serial.println(RECV_PIN);
}

void loop()
{
   if (irReceive() == s1) {
    digitalWrite(LED,!digitalRead(LED));
    /*
    switch (state)
    {
      case ON :
        digitalWrite (LED, HIGH);
        state = OFF;
        break;
      case OFF :
        digitalWrite (LED, LOW);
        state = ON;
        break;
    }
    Serial.print(state);
    */
  }
}

uint16_t irReceive() {
  uint16_t received{0};
  
  if (IrReceiver.decode()) {
    IrReceiver.printIRResultShort(&Serial);
    if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
      // We have an unknown protocol here, print more info
      IrReceiver.printIRResultRawFormatted(&Serial, true);
    }
    if (IrReceiver.decodedIRData.protocol == NEC) {
      received = IrReceiver.decodedIRData.command;
      Serial.print("Command: 0x");
      Serial.println(received, HEX);
    }
    IrReceiver.resume();
  }
  return received;
}