

Die Tasten der Fernbedienung sollen verwendet werden um das Lauflicht zu steuern.
Taste 1 → die LEDs leuchten nacheinander für 100 ms,
Taste 2 → die LEDs leuchten nacheinander für 100 ms vor und zurück
Taste 3 → LEDs blinken nacheinander
Benötigte Bauteile:
- 5 LEDs
- 5 Widerstände > 100 Ω
- Infrarot-Empfänger
- Keyes-Fernbedienung
- Leitungsdrähte
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Achte auf die Pinbelegung des Infrarotempfängers.

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

Die Fernbedienung sendet beim Druck auf die Tasten einen Zahlencode.

Die Tastencodes beziehen sich auf die Keyes-Fernbedienung. Die Tastencodes anderer Fernbedienungen kannst du mit Hilfe des Seriellen Monitors herausfinden. Außerdem werden die Codes nicht immer zuverlässig gelesen, deshalb musst du manchmal die Taste mehrmals drücken.
Tastencodes Keyes-Fernbedienung
oben | links | rechts | unten | OK | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|---|---|---|
16736925 | 16720605 | 16761405 | 16754775 | 16712445 | 16738455 | 16750695 | 16756815 | 16724175 |
5 | 6 | 7 | 8 | 9 | + | 0 | # | |
---|---|---|---|---|---|---|---|---|
16718055 | 16743045 | 16716015 | 16726215 | 16734885 | 16728765 | 16730805 | 16732845 |
Bevor du starten kannst, musst du eine Bibliothek installieren:
Sketch → Bibliothek einbinden → Bibliotheken verwalten
Suche nach der Bibliothek IRremote, bewege die Maus in das entsprechende Feld und ...

… klicke auf Installieren.
Die Tastencodes beliebiger Fernbedienungen kannst du mit folgendem Programm herausfinden. Sie werden im Seriellen Monitor angezeigt.
// Bibliothek einbinden
# include <IRremote.h>
// der Empfänger ist an Pin 13 angeschlossen
int IREmpfaenger = 13;
// EmpfaengerLesen liest den Wert der gedrückten Taste
IRrecv EmpfaengerLesen(IREmpfaenger);
// der empfangene Code wird unter Ergebnis abgespeichert
decode_results Ergebnis;
void setup()
{
Serial.begin(9600);
// der IR-Empfänger wird gestartet
EmpfaengerLesen.enableIRIn();
}
void loop()
{
// wenn Daten empfangen werden
// werden sie als Dezimalzahl(DEC) gespeichert
if (EmpfaengerLesen.decode(&Ergebnis))
{
Serial.println(Ergebnis.value, DEC);
EmpfaengerLesen.resume();
}
}
Für die Keyes-Fernbedienung sieht das Programm so aus:
# include <IRremote.h>
// der Empfänger ist an Pin 13 angeschlossen
int IREmpfaenger = 13;
// EmpfaengerLesen liest den Wert
IRrecv EmpfaengerLesen(IREmpfaenger);
// der empfangene Code wird unter Ergebnis abgespeichert
decode_results Ergebnis;
int Zahl;
void setup()
{
Serial.begin(9600);
EmpfaengerLesen.enableIRIn();
}
void loop()
{
if (EmpfaengerLesen.decode(&Ergebnis))
{
delay(200);
switch (Ergebnis.value)
{
// Taste 0
case 16730805:
Zahl = 0;
Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
break;
// Taste 1
case 16738455:
Zahl = 1;
Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
break;
// Taste 2
case 16750695:
Zahl = 2;
Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
break;
// Taste 3
case 16756815:
Zahl = 3;
Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
break;
// Taste 4
case 16724175:
Zahl = 4;
Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
break;
// Taste 5
case 16718055:
Zahl = 5;
Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
break;
// Taste 6
case 16743045:
Zahl = 6;
Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
break;
// Taste 7
case 16716015:
Zahl = 7;
Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
break;
// Taste 8
case 16726215:
Zahl = 8;
Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
break;
// Taste 9
case 16734885:
Zahl = 9;
Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
break;
}
EmpfaengerLesen.resume();
}


Ein weiteres Beispiel:
Durch Drücken der Taste Pfeil nach oben wird eine LED eingeschaltet, Pfeil nach unten schaltet sie wieder aus.
# include <IRremote.h>
// der Empfänger ist an Pin 13 angeschlossen
int IREmpfaenger = 13;
// EmpfaengerLesen liest den Wert
IRrecv EmpfaengerLesen(IREmpfaenger);
// der empfangene Code wird unter Ergebnis abgespeichert
decode_results Ergebnis;
int LED = 7;
void setup()
{
Serial.begin(9600);
// der IR-Empfänger wird gestartet
EmpfaengerLesen.enableIRIn();
pinMode(LED, OUTPUT);
}
void loop()
{
// wenn Daten empfangen werden
// werden sie als Dezimalzahl(DEC) gespeichert
if (EmpfaengerLesen.decode(&Ergebnis))
{
// Anzeige der gedrückten Taste
Serial.println(Ergebnis.value, DEC);
// Taste Pfeil oben
if (Ergebnis.value == 16736925)
{
digitalWrite(LED,HIGH);
}
// Taste Pfeil unten
if (Ergebnis.value == 16754775)
{
digitalWrite(LED,LOW);
}
// nächsten Wert lesen
EmpfaengerLesen.resume();
}
}
Die Tasten der Fernbedienung sollen das Lauflicht steuern:
Taste 1 → die LEDs leuchten nacheinander für 100 ms
Taste 2 → die LEDs leuchten nacheinander für 100 ms vor und zurück
Taste 3 → LEDs blinken nacheinander
Beginne mit der Programmierung.
Schreibe ➨Methoden für die den Tasten der Fernbedienung zugeordneten Ereignisse:
LEDBlinken()
LauflichtHin()
LauflichtHinUndHer()
LauflichtMitBlinken()
void LEDBlinken(int LEDNummer, int Anzahl)
{
for (int zaehler = 0; zaehler <= Anzahl; zaehler ++)
{
digitalWrite(LEDNummer, HIGH);
delay(Leuchtdauer);
digitalWrite(LEDNummer, LOW);
delay(Leuchtdauer);
}
}
void LauflichtHin()
{
for (int i = 0; i ˋ<= 4; i ++)
{
digitalWrite(LED[i], HIGH);
delay(Leuchtdauer);
digitalWrite(LED[i], LOW);
}
}

Verwende die Methode LauflichtHin() als Vorlage für die übrigen Methoden.
void LauflichtHinUndHer()
{
for (int i = 0; i <;= 4; i ++)
{
digitalWrite(LED[i], HIGH);
delay(Leuchtdauer);
digitalWrite(LED[i], LOW);
}
// und wieder zurück
for (int i = 4; i >= 0; i--)
{
. . .
}
}
Die Methode LauflichtMitBlinken:
void LauflichtMitBlinken()
{
for (int i = 0; i <= 4; i++)
{
int Anzahl = random(1, 5);
/* aktuelle LED i einschalten
→ Methode LEDBlinken aufrufen
*/
LEDBlinken(LED[i], Anzahl);
}
}
Im setup-Teil wird der Infrarot-Empfänger gestartet, die pinModes der LEDs mit einem ➨Array festgelegt und der Zufallsgenerator gestartet.
# include <IRremote.h>
// Array mit 5 Elementen und den zugehörigen Ports
int LED[5] = {3, 4, 5, 6, 7};
int EMPFAENGER = 13;
IRrecv irrecv(EMPFAENGER);
decode_results Ergebnis;
int Leuchtdauer = 100;
int Anzahl = 1;
Im loop-Teil musst du zunächst die Tastencodes abfragen und anschließend die Tastencodes mit ➨switch auswerten:
void loop()
{
if (irrecv.decode(&Ergebnis))
{
switch (Ergebnis.value)
{
// Taste 1
case 16738455:
for (int i = 0; i < Anzahl; i ++)
{
LauflichtHin();
}
break;
// Taste 2 → LEDs leuchten vor und zurück
case 16750695:
for (int i = 0; i < Anzahl; i ++)
{
LauflichtHinUndHer();
}
break;
// Taste 3 → LEDs blinken nacheinander
case 16756815:
. . .
. . .
}
}
}
Verwandte Aufgaben:
Letzte Aktualisierung: