#include <IRremote.h>

#define PIN_RECEIVER A0

IRrecv receiver(PIN_RECEIVER);
decode_results irRecvResults;

String input = ""; // Verwenden Sie einen String, um die Eingabe zu speichern

void irdecode(IRrecv inputIRPin) {
  char cmd = '\0'; // Deklaration und Initialisierung der interne Variable mit einem Nullzeichen

  int decoded = inputIRPin.decode();   // Dekodieren des empfangenen IR-Signals und Speichern des Ergebnisses in der Variable 'decoded'

  if (decoded) {
    if (inputIRPin.decodedIRData.command) {
      switch (inputIRPin.decodedIRData.command) {
        // Fälle für andere Befehle...
        case 104: cmd = '0'; break;
        case  48: cmd = '1'; break;
        case  24: cmd = '2'; break;
        case 122: cmd = '3'; break;
        case  16: cmd = '4'; break;
        case  56: cmd = '5'; break;
        case  90: cmd = '6'; break;
        case  66: cmd = '7'; break;
        case  74: cmd = '8'; break;
        case  82: cmd = '9'; break;
        case 162: // Power
        case 226: // Menu
        case  34: // Test
        case 176: // C
        case   2: // Plus
        case 152: // Minus
        case 168: // Play
        case 144: // Forward
        case 224: // Rewind
        case 194: // Back
          cmd = 'P'; // Setzt cmd auf 'P' für alle oben aufgeführten Fälle
          break;
      }
    }

    // Führt den Code aus, wenn die Taste "P" gedrückt wurde
    if (cmd == 'P') {
      // Überprüft, ob die Eingabe mindestens ein Zeichen lang ist
      if (input.length() > 0) {
        Serial.print("Eingabe: ");
        Serial.print(input); // Ausgabe des Eingabestrings
        Serial.print(" => Ausgabe: ");
        int result = input.toInt(); // Konvertiere den Eingabestring in eine Ganzzahl
        Serial.println(result); // Ausgabe des Ergebnisses
        input = ""; // Zurücksetzen des Eingabestrings für die nächste Eingabe
      }
    } // Überprüfen, ob die empfangene Zeichen eine Ziffer ist
    else if (cmd >= '0' && cmd <= '9') { 
      input += cmd; // Hängen Sie das empfangene Zeichen an den Eingabestring an
    }

    inputIRPin.resume();  // Setzt den IR-Empfänger zurück, um bereit für das nächste Signal zu sein

  }
}

void setup() {
  Serial.begin(9600); // Initialisierung der seriellen Verbindung mit einer Baudrate von 9600
  receiver.enableIRIn(); // Aktivierung des Infrarot-Empfangs
}

void loop() {
  irdecode(receiver); // Aufruf der Funktion irdecode zum Entschlüsseln des empfangenen Infrarot-Signals
  delay(500); // Verzögerung von 500 Millisekunden, um die Prozessorgeschwindigkeit zu verlangsamen und das Programm nicht zu überlasten
}