
Ziel des Projekts
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
Benötigte Bauteile
- ⇒Infrarotmodul
- Keyes Fernbedienung
- LEDs
- Widerstände 220 Ω
- Leitungsdrähte
Der Schaltplan
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Benötigte Bibliothek

Das Programm
Die Fernbedienung sendet beim Druck auf die Tasten einen Zahlencode.
Tastencodes Keyes-Fernbedienung
| Pfeil oben | ||
| 70 | ||
| Pfeil links | Taste OK | Pfeil rechts |
| 68 | 64 | 67 |
| Pfeil unten | ||
| 21 | ||
| Taste 1 | Taste 2 | Taste 3 |
| 22 | 25 | 13 |
| Taste 4 | Taste 5 | Taste 6 |
| 12 | 24 | 94 |
| Taste 7 | Taste 8 | Taste 9 |
| 8 | 28 | 90 |
| Taste * | Taste 0 | Taste # |
| 66 | 82 | 74 |
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; } } |
Ähnliche Projekte:
Letzte Aktualisierung:

