![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2023/07/Arduinos_ohne_R4-1024x142.png)
![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2021/12/FB_Keyes.jpg)
Die Fernbedienung steuert verschiedene Lauflichter. Sie leuchten jeweils solange, bis eine beliebige andere Taste auf der Fernbedienung gedrückt wird.
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 zufällig oft nacheinander
So sieht es aus:
Benötigte Bauteile:
- 5 LEDs
- 3 Widerstände 220 Ω (gelbe, rote und grüne LED)
- 2 Widerstände 100 Ω (blaue und weiße LED)
- Infrarot-Empfänger
- Keyes-Fernbedienung
- Leitungsdrähte
![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2022/05/info.png)
Beachte die ➨Vorwiderstände verschiedener LEDs
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.
![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2022/10/Infrarotempfaenger.png)
Achte darauf, dass die Batterie richtig eingelegt wurde. Der Minus-Pol liegt oben.
![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2020/02/Keyes_FB.png)
Benötigte Bibliothek:
Suche die Bibliothek IRremote ...
![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2021/11/Bibliothek_IRRemote.png)
… klicke auf Installieren.
Die Fernbedienung sendet beim Druck auf die Tasten einen Zahlencode.
![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2021/04/Keyes_Bild.png)
Tastencodes Keyes-Fernbedienung
Pfeil oben | |||
Tastencode | 70 | ||
Pfeil links | Taste OK | Pfeil rechts | |
Tastencode | 68 | 64 | 67 |
Pfeil unten | |||
Tastencode | 21 | ||
Taste 1 | Taste 22 | Taste 3 | |
Tastencode | 22 | 25 | 13 |
Taste 4 | Taste 5 | Taste 6 | |
Tastencode | 12 | 24 | 94 |
Taste 7 | Taste 8 | Taste 9 | |
Tastencode | 8 | 28 | 90 |
Taste * | Taste 0 | Taste # | |
Tastencode | 66 | 82 | 74 |
![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2022/05/info.png)
➨Tastencodes OpenSmart Fernbedienung
![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2022/05/info.png)
➨Testprogramm beliebige Fernbedienung
Die Tastencodes kannst du mit folgendem Programm herausfinden. Sie werden im Seriellen Monitor angezeigt.
// benötigte Bibliothek einbinden
# include "IRremote.h"
// der Pin, an dem der Infrarot-Empfänger angeschlossen ist
int EmpfaengerPin = 2;
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 deshalb 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");
}
}
}
![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2022/09/IRRemote_Testprogramm.png)
![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2022/05/Brille_Buch.png)
Beispiel:
Durch Drücken der Taste Pfeil nach oben wird eine LED eingeschaltet, Pfeil nach unten schaltet sie wieder aus.
# include "IRremote.h"
int EmpfaengerPin = 2;
int LED = 3;
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
// Empfänger starten
IrReceiver.begin(EmpfaengerPin);
pinMode(LED, OUTPUT);
}
void loop()
{
// Daten lesen
if (IrReceiver.decode())
{
// oben
if (IrReceiver.decodedIRData.command == 70 )
{
digitalWrite(LED, HIGH);
}
// unten
else if (IrReceiver.decodedIRData.command == 21)
{
digitalWrite(LED, LOW);
}
delay(200);
// nächsten Wert lesen
IrReceiver.resume();
}
}
Binde die benötigte Bibliothek ein und definiere die Variablen.
# include "IRremote.h"
// Pin für den Auslöser des Interrupts
int InterruptPin = 2;
// Array mit 5 Elementen und den zugehörigen Ports
int LED[5] = {3, 4, 5, 6, 7};
// Anzahl der LEDs feststellen
int LEDMax = sizeof(LED) / sizeof(LED[0]);
// Variable im Flash-Speicher ablegen
volatile bool Status = true;
int Leuchtdauer = 100;</irremote.h>
Der setup-Teil. Beachte die Kommentare
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
// Zufallsgenerator starten
randomSeed(analogRead(A0));
// Empfänger starten
IrReceiver.begin(InterruptPin);
for (int i = 0; i < LEDMax; i++)
{
pinMode(LED[i], OUTPUT);
}
// Funktion Schalten() dem Interrupt-Pin zuordnen
attachInterrupt(digitalPinToInterrupt(InterruptPin), Schalten, FALLING);
}
![](https://hartmut-waller.info/arduinoblog/wp-content/uploads/2022/05/info.png)
Im loop-Teil musst du zunächst die Tastencodes abfragen und anschließend die Tastencodes mit ➨switch auswerten:
void loop()
{
// Daten lesen
if (IrReceiver.decodedIRData.address == 0)
{
if (IrReceiver.decode())
{
delay(200);
Status = true;
/*
solange der Status true ist, wird die jeweilige while-Schleife
ausgeführt, ein weiterer Druck auf eine Taste der Fernbedienung löst
den Interrupt aus
-> Status wird zu false, die while-Schleife wird nicht erneut
ausgeführt
*/
switch (IrReceiver.decodedIRData.command)
{
// Taste 1: Lauflicht vor
case 22:
while (Status) LauflichtHin();
break;
// Taste 2: LEDs leuchten vor und zurück
case 25:
while (Status) LauflichtHinUndHer();
break;
// Taste 3: LEDs blinken nacheinander
case 13:
while (Status) LauflichtMitBlinken();
break;
}
// nächsten Wert lesen
IrReceiver.resume();
}
}
}
Beginne mit der Programmierung für die Lauflichter.
Schreibe ➨Funktionen für die den Tasten der Fernbedienung zugeordneten Ereignisse:
LEDBlinken()
LauflichtHin()
LauflichtHinUndHer()
LauflichtMitBlinken()
und die durch den Interrupt ausgelöste Funktion Schalten(). Sie ändert den Zustand von Status auf false.
void LEDBlinken(int LEDNummer, int Anzahl)
{
for (int i = 0; i <= Anzahl; i ++)
{
digitalWrite(LEDNummer, HIGH);
delay(Leuchtdauer);
digitalWrite(LEDNummer, LOW);
delay(Leuchtdauer);
}
}
void LauflichtHin()
{
for (int i = 0; i < LEDMax; i ++)
{
digitalWrite(LED[i], HIGH);
delay(Leuchtdauer);
digitalWrite(LED[i], LOW);
}
}
void LauflichtMitBlinken()
{
for (int i = 0; i < LEDMax; i++)
{
int Anzahl = random(1, 5);
/* aktuelle LED i einschalten
→ Funktion LEDBlinken aufrufen
*/
LEDBlinken(LED[i], Anzahl);
}
}
void LauflichtHinUndHer()
{
for (int i = 0; i < LEDMax; i++)
{
digitalWrite(LED[i], HIGH);
delay(Leuchtdauer);
digitalWrite(LED[i], LOW);
}
// und wieder zurück
for (int i = LEDMax - 1; i >= 0; i--)
{
digitalWrite(LED[i], HIGH);
delay(Leuchtdauer);
digitalWrite(LED[i], LOW);
}
}
void Schalten()
{
Status = false;
}
Verwandte Anleitungen:
- Interrupt: Lauflicht
- Interrupt - Lauflicht mit Drehgeber
- Interrupt: Licht ein- und ausschalten
- Interrupt: Licht schalten mit Bewegungsmelder
- Interrupt: Morsegerät
- Interrupt: Farbenspiel mit einem NeoPixel-Ring
Letzte Aktualisierung: