Der Infrarotempfänger wartet auf das Eingehen eines Infrarotsignales von dem Handsender. Im Ruhezustand liegt an dem Datenpin des Empfängers zum Mikrokontroller ein HIGH-Signal an (nichts passiert). Sobald ein Infrarotsignal vom Empfänger erkannt wird, wird der Datenpin auf LOW geschaltet und danach die Information übermittelt. Diese Information ist in binär codiert und erfordert eine Decodierung. Die Übersetzung wird von einer Bibliothek vorgenommen. Der decodierte Wert wird in einer Variable zwischengespeichert und kann zum Beispiel mit vorhandenen Tastencodes im Programm verglichen werden.

Nach dem Auslesen des Infrarotsignals kann keine Prüfung auf Plausiblität der Daten vorgenommen werden, da diese nur in eine Richtung übertragen werden. Aus diesem Grund kann es dazu kommen, das der ausgelesene Infrarotcode nicht dem richtigen Code entspricht. In diesem Falle sollte mehrfach die auszulesene Taste hintereinander betätigt werden und der am häufigsten auftrtende Code ist der zuordnenbare Code.


Hier (Datei "Vorlage_IR_Auslesen.ino") findet man ein Programmbeispiel zum auslesen des Infrarotempfängers :


#include <IRremoteESP8266.h>                              // Bibliothek zum empfang von Infrarotsignalen
#include <IRrecv.h>                                       // Bibliothek zum verarbeiten von Infrarotsignalen
#include <IRutils.h>                                      // Bibliothek für Funktionen nach Infrarotempfang


#define RECV_PIN  34                                       //Pin, an dem der Pin des IR-Empfängers angeschlossen ist

IRrecv irrecv(RECV_PIN);                                   //Eingangsbestimmung für den Infrarot-Datenstrom
decode_results results;                                    //Dekodierung in Datei schreiben
int IRcode = 0;                                            //variable für den Empfangen Tastencode

void setup()
{
  irrecv.enableIRIn();                                    // Empfänger wird ausgeführt
  Serial.begin(115200);                                   //Serielle Kommunikation starten
}

void loop()
{
  int IRcode = 0;                               //Zurücksetzen des IR-Codespeichers für das nächste auslesen
  if (irrecv.decode(&results))                  //Wenn ein IR-Signal empfangen wurde
  {
    IRcode = (results.value);                   //Das Empfangsignal in der Variable speichern
    Serial.print(IRcode, HEX);                  //Gebe den IrCode hexadezimal im Seriellen Monitor aus
    Serial.println("");
    irrecv.resume();                            //IR-Empfänger für den nächsten Wert bereit machen.
    delay(100);                                 //Verzögerung für den Empfang der nächsten Variable
  }
}