Infrarot-Fernbedienung mit dem Arduino auswerten
FunduinoZuletzt aktualisiert am
Tastencodes einer Fernbedienung einlesen und damit etwas schalten
Wie eine Infrarot-Fernbedienung funktioniert
Empfänger anschließen
1 / 2
Tastencodes auslesen
Tastencodes der Fernbedienung auslesen
// Das Programm greift hier auf eine Bibliothek zurück. Das erspart viel Arbeit: Das
// Infrarotlicht wird verschlüsselt gesendet, und um diesen Code selbst auszulesen und
// in passende Werte umzuwandeln, wären sehr viele Zeilen Code nötig.
#include <IRremote.h>
int EmpfaengerPin = 11; // der Pin, an dem der Infrarot-Empfänger angeschlossen ist
void setup()
{
Serial.begin(9600); // Seriellen Monitor starten
IrReceiver.begin(EmpfaengerPin); // Infrarot-Empfänger starten
}
void loop()
{
if (IrReceiver.decode()) // decode() prüft, ob Daten vorhanden sind
{
delay(200); // kurze Pause, damit nur ein Tastendruck gelesen wird
IrReceiver.resume(); // resume() liest den nächsten Wert
/*
Der Empfänger empfängt zwischendurch Signale, die sich nicht auswerten lassen.
Ausgewertet werden sollen deshalb nur die korrekt erkannten Tasten. Deren
Dezimalwerte liegen zwischen 0 und 95. Die folgende Zeile fragt ab, ob das
empfangene Kommando decodedIRData.command größer als 0 UND (&&) kleiner als 95 ist.
*/
if (IrReceiver.decodedIRData.command > 0 && IrReceiver.decodedIRData.command < 95)
{
// Der Text "Dezimalwert: " erscheint am seriellen Monitor, danach der Wert selbst.
Serial.print("Dezimalwert: ");
// decodedIRData.command ist der Wert der gedrückten Taste.
Serial.print(IrReceiver.decodedIRData.command);
// Der Pfeil trennt den Wert von der zugeordneten Taste auf der Fernbedienung.
Serial.print(" -> ");
// Die Dezimalzahl 69 entspricht bei unserer Fernbedienung der Taste "A", und so weiter.
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");
}
}
}Erweiterung: Eine LED mit der Fernbedienung schalten
Erweiterung: LED mit der Fernbedienung schalten
#include <IRremote.h>
int EmpfaengerPin = 11;
int LED = 13; // Pin der LED
void setup()
{
IrReceiver.begin(EmpfaengerPin);
pinMode(LED, OUTPUT); // Pin 13 wird als Ausgang definiert.
}
void loop()
{
if (IrReceiver.decode()) // Prüfen, ob Daten vorhanden sind
{
IrReceiver.resume(); // nächsten Wert lesen
if (IrReceiver.decodedIRData.address == 0)
{
// Taste 1 -> gelesener Dezimalwert 22 -> LED einschalten
if (IrReceiver.decodedIRData.command == 22) digitalWrite(LED, HIGH);
// Taste 2 -> gelesener Dezimalwert 25 -> LED ausschalten
if (IrReceiver.decodedIRData.command == 25) digitalWrite(LED, LOW);
}
}
}Anleitung bewerten