
Das Programm kann über die Tasten der Fernbedienung jede LED einzeln ein- und ausschalten, alle gemeinsam schalten und ein Lauflicht starten.
- die Tasten 1 bis 7 schalten jeweils eine LED
- ← Lauflicht nach links
- ➞ Lauflicht nach rechts
- # alle LEDs ausschalten
So sieht es aus:
Benötigte Bauteile:
- Infrarotempfänger
- Keyes Fernbedienung
- LEDs
- Widerstände 220 Ω
- Leitungsdrähte
Baue die Schaltung auf:
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Achte auf die Pinbelegung der Infrarotempfänger.


Achte darauf, dass die Batterie richtig eingelegt wurde. Der Minus-Pol liegt oben.
Benötigte Bibliothek:
Suche die Bibliothek IRremote …
… klicke auf Installieren.

oder: Sketch -> Bibliothek einbinden -> Bibliotheken verwalten
Die Fernbedienung sendet beim Druck auf die Tasten einen Zahlencode.
Tastencodes Keyes-Fernbedienung
| 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) |

⇒Tastencodes OpenSmart Fernbedienung

⇒Testprogramm beliebige Fernbedienung
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”); } } } |

Binde die benötigte Bibliothek ein und definiere die Variablen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // benötigte Bibliothek einbinden #include “IRremote.hpp” // Pin, an dem der Infrarot-Empfänger angeschlossen ist int EmpfaengerPin = 11; // Anzahl der LEDs #define AnzahlLED 7 // Pins der LEDs int LED[AnzahlLED] = { 3, 4, 5, 6, 7, 8, 9 }; // beim Start sind alle LEDs ausgeschaltet bool LEDStatus[AnzahlLED] = { LOW, LOW, LOW, LOW, LOW, LOW, LOW }; |
Der setup-Teil:
1 2 3 4 5 6 7 8 9 10 11 | void setup() { // Infrarot-Empfänger starten IrReceiver.begin(EmpfaengerPin); // pinMode der LEDs definieren for(int i = 0; i < AnzahlLED; i++) { pinMode(LED[i], OUTPUT); } } |
Im loop-Teil musst du jede Taste mit ⇒switch … case abfragen und die Funktionen aufrufen:
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 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) { // Werte abfragen und anzeigen // Tasten 1–7 switch (IrReceiver.decodedIRData.command) { case 22: LEDSchalten(0); break; case 25: LEDSchalten(1); break; case 13: LEDSchalten(2); break; case 12: LEDSchalten(3); break; case 24: LEDSchalten(4); break; case 94: LEDSchalten(5); break; case 8: LEDSchalten(6); break; // * case 66: AlleAn(); break; // # case 74: AlleAus(); break; // Pfeil links case 68: LauflichtLinks(); break; // Pfeil rechts case 67: LauflichtRechts(); break; default: break; } } } } |
Jetzt fehlen noch die Funktionen LEDSchalten(), LauflichtLinks(), LauflichtRechts() AlleAn() und AlleAus().
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 | void LEDSchalten(int LEDNummer) { // LEDStatus umkehren LOW -> HIGH, HIGH -> LOW LEDStatus[LEDNummer] = !LEDStatus[LEDNummer]; digitalWrite(LED[LEDNummer], LEDStatus[LEDNummer]); } void LauflichtLinks() { for (int i = 0; i < AnzahlLED; i++) { digitalWrite(LED[i], HIGH); delay(100); digitalWrite(LED[i], LOW); AlleAus(); } } void LauflichtRechts() { for (int i = AnzahlLED; i >= 0; i–) { digitalWrite(LED[i], HIGH); delay(100); digitalWrite(LED[i], LOW); AlleAus(); } } void AlleAus() { // LEDs ausschalten // LEDStatus aller LEDs auf LOW setzen for (int i = 0; i < AnzahlLED; i++) { digitalWrite(LED[i], LOW); LEDStatus[i] = LOW; } } void AlleAn() { // LEDs einschalten // LEDStatus aller LEDs auf HIGH setzen for (int i = 0; i < AnzahlLED; i++) { digitalWrite(LED[i], HIGH); LEDStatus[i] = HIGH; } } |
Verwandte Anleitungen:
Letzte Aktualisierung:






