Ziel des Projekts
Das Beispielprogramm zeigt, wie du eine Keyes-Fernbedienung mit einem Arduino verwenden kannst.
Benötigte Bauteile:
- Infrarotempfänger
- Keyes Fernbedienung
- Leitungsdrähte
Die Hardware
Achte auf die Pinbelegung der Infrarotempfänger:

Achte darauf, dass die Batterie richtig eingelegt wurde. Der Minus-Pol liegt oben.

Der Schaltplan
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Benötigte Bibliothek
Für die Verwendung des Infrarotempfängers und der Fernbedienung benötigst du eine Bibliothek:
Suche die Bibliothek IRremote …
… klicke auf Installieren.

oder: Sketch -> Bibliothek einbinden -> Bibliotheken verwalten
Tastencodes
Die Fernbedienung sendet beim Druck auf die Tasten einen Zahlencode.
| Pfeil oben | ||
| 70 (0x46) | ||
| Pfeil links | Taste OK | Pfeil rechts |
| 68 (0x44) | 64 (0x40) | 67 (0x43) |
| Pfeil unten | ||
| 21 (0x15) | ||
| Taste 1 | Taste 2 | Taste 3 |
| 22 (0x16) | 25 (0x19) | 13 (0xD) |
| Taste 4 | Taste 5 | Taste 6 |
| 12 (0xC) | 24 (0x18) | 94 (0x5E) |
| Taste 7 | Taste 8 | Taste 9 |
| 8 (0xB) | 28 (0x1C) | 90 (0x5A) |
| Taste * | Taste 0 | Taste # |
| 66 (0x42) | 82 (0x52) | 74 (0x4A) |
Die Tastencodes kannst du mit folgendem Programm herausfinden. Sie werden im Seriellen Monitor angezeigt.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
// benötigte Bibliothek einbinden #include "IRremote.hpp" // 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 == 22) Serial.println("Taste 1"); if (IrReceiver.decodedIRData.command == 25) Serial.println("Taste 2"); if (IrReceiver.decodedIRData.command == 13) Serial.println("Taste 3"); if (IrReceiver.decodedIRData.command == 12) Serial.println("Taste 4"); if (IrReceiver.decodedIRData.command == 24) Serial.println("Taste 5"); if (IrReceiver.decodedIRData.command == 94) Serial.println("Taste 6"); if (IrReceiver.decodedIRData.command == 8) Serial.println("Taste 7"); if (IrReceiver.decodedIRData.command == 28) Serial.println("Taste 8"); if (IrReceiver.decodedIRData.command == 90) Serial.println("Taste 9"); if (IrReceiver.decodedIRData.command == 82) Serial.println("Taste 0"); if (IrReceiver.decodedIRData.command == 66) Serial.println("Taste *"); if (IrReceiver.decodedIRData.command == 74) Serial.println("Taste #"); if (IrReceiver.decodedIRData.command == 68) Serial.println("Pfeil links"); if (IrReceiver.decodedIRData.command == 67) Serial.println("Pfeil rechts"); if (IrReceiver.decodedIRData.command == 70) Serial.println("Pfeil oben"); if (IrReceiver.decodedIRData.command == 21) Serial.println("Pfeil unten"); if (IrReceiver.decodedIRData.command == 64) Serial.println("OK"); } } } |
Die Ausgabe im Seriellen Monitor:

Testprogramm für beliebige Fernbedienungen

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include "IRremote.hpp" int EmpfaengerPin = 11; void setup() { Serial.begin(9600); // Empfänger starten IrReceiver.begin(EmpfaengerPin); } void loop() { // Daten lesen if (IrReceiver.decode()) { delay(200); // resume -> nächsten Wert lesen IrReceiver.resume(); if (IrReceiver.decodedIRData.command > 0) { /* printIRResultMinimal zeigt die verwendete Taste P = Protokoll C = Kommando in Hex */ Serial.print(F("P = Protokoll C = Taste hexadezimal: ")); IrReceiver.printIRResultMinimal(&Serial); Serial.print(F(" Dezimal: ")); Serial.println(IrReceiver.decodedIRData.command); } } } |
LED mit Fernbedienung schalten
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.

So sieht es aus:
Das Programm:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include "IRremote.hpp" 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); } } } |
Letzte Aktualisierung: