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 | |||
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 |
⇒Tastencodes OpenSmart Fernbedienung
⇒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 = 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.
// benötigte Bibliothek einbinden
#include "IRremote.h"
// 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:
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:
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().
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:
- Einmaleinsreihen - Anzeige mit Keyes-Fernbedienung
- Labyrinth-Spiel mit TFT und Fernbedienung
- Interrupt: Lauflicht mit Fernbedienung
- Würfeln einstellige 7-Segment-Anzeige und Fernbedienung
Letzte Aktualisierung: