Infrarot-Fernbedienung und Empfänger
Infrarot-Fernbedienungen senden ein für uns unsichtbares Licht „durch die Luft“. Der Empfänger nimmt die Lichtsignale auf und wandelt sie in einen Zahlencode um. Dieser Zahlencode kann viele Geräte steuern.
Das infrarote Licht wird vom Empfänger erkannt. Der Empfänger enthält eine Fotodiode, das aufgefangene Licht wird in einen Zahlencode umgewandelt.
Dieser Zahlencode wird abgefragt und kann dann anschließend eine Aktion auslösen.
Bevor du mit der eigentlichen Programmierung beginnen kannst, musst du eine Bibliothek installieren.
Für die Programmierung wird die Bibliothek IRremote verwendet.Sie muss über den Bibliotheksverwalter installiert werden:
Sketch -> Bibliothek einbinden -> Bibliotheken verwalten
Wird eine Taste auf der Fernbedienung gedrückt, zeigt der Seriellen Monitor den Tastencode an.
Vorher musst du den Seriellen Monitor starten:
Entweder über das Menü …
… oder über das Icon in der oberen Leiste:
Ausgabe im Seriellen Monitor
// benötigte Bibliothek einbinden
# include
// der Pin, an dem der Infrarot-Empfänger angeschlossen ist
int EmpfaengerPin = 11;
void setup()
{
// Seriellen Monitor starten
Serial.begin(9600);
// Infrarot-Empfänger starten
IrReceiver.begin(EmpfaengerPin);
}
void loop()
{
// decode() -> Daten lesen
if (IrReceiver.decode())
{
// kurzes delay, damit nur ein Tastendruck gelesen wird
delay(200);
// resume -> nächsten Wert lesen
IrReceiver.resume();
/*
der Empfänger empfängt zwischendurch Signale,
die nicht ausgewertet werden können
es sollen dehalb nur die korrekt erkannten Tasten ausgewertet werden
die Dezimalwerte der korrekten erkannten Tasten liegen zwischen > 0 und < 95
es wird abgefragt, ob das empfangene Kommando decodedIRData.command
zwischen 0 und (&&) 95 liegt
*/
if (IrReceiver.decodedIRData.command > 0 && IrReceiver.decodedIRData.command < 95)
{
Serial.print("Dezimalwert: ");
// IrReceiver.decodedIRData.command = Wert der gedrückten Taste
Serial.print(IrReceiver.decodedIRData.command);
Serial.print(" -> ");
// Werte abfragen und anzeigen
if (IrReceiver.decodedIRData.command == 69) Serial.println("A");
if (IrReceiver.decodedIRData.command == 70) Serial.println("Pfeil oben");
if (IrReceiver.decodedIRData.command == 71) Serial.println("B");
if (IrReceiver.decodedIRData.command == 68) Serial.println("Pfeil links");
if (IrReceiver.decodedIRData.command == 64) Serial.println("X");
if (IrReceiver.decodedIRData.command == 67) Serial.println("Pfeil rechts");
if (IrReceiver.decodedIRData.command == 7) Serial.println("0");
if (IrReceiver.decodedIRData.command == 21) Serial.println("Pfeil unten");
if (IrReceiver.decodedIRData.command == 9) Serial.println("C");
if (IrReceiver.decodedIRData.command == 22) Serial.println("1");
if (IrReceiver.decodedIRData.command == 25) Serial.println("2");
if (IrReceiver.decodedIRData.command == 13) Serial.println("3");
if (IrReceiver.decodedIRData.command == 12) Serial.println("4");
if (IrReceiver.decodedIRData.command == 24) Serial.println("5");
if (IrReceiver.decodedIRData.command == 94) Serial.println("6");
if (IrReceiver.decodedIRData.command == 8) Serial.println("7");
if (IrReceiver.decodedIRData.command == 28) Serial.println("8");
if (IrReceiver.decodedIRData.command == 90) Serial.println("9");
}
}
}
Die Schaltung wird mit einer LED an Pin 7 erweitert.
Die LED wird eingeschaltet, wenn die Taste 1 der Fernbedienung gedrückt wird, Taste 2 schaltet die LED wieder aus.
# include
int EmpfaengerPin = 11;
// Pin der LED
int LED = 7;
void setup() {
IrReceiver.begin(EmpfaengerPin);
pinMode(LED, OUTPUT);
}
void loop()
{
// Daten lesen
if (IrReceiver.decode())
{
// nächsten Wert lesen
IrReceiver.resume();
if (IrReceiver.decodedIRData.address == 0)
{
// Taste 1 -> gelesener Deizimalwert 22 -> LED einschalten
if (IrReceiver.decodedIRData.command == 22) digitalWrite(LED, HIGH);
// Taste 2 -> gelesener Deizimalwert 25 -> LED ausschalten
if (IrReceiver.decodedIRData.command == 25) digitalWrite(LED, LOW);
}
}
}