Das Programm soll zu jeder Zahlentaste der Fernbedienung die dazugehörige Einmaleinsreihe im Seriellen Monitor anzeigen.
So soll es aussehen:
Benötigte Bauteile:
- Infrarotempfä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 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 den Pin des Empfängers.
Im setup-Teil wird der Serielle Monitor gestartet und die Fernbedienung initialisiert.
# include <IRremote.h>
int EmpfaengerPin = 11;
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
// Empfänger starten
IrReceiver.begin(EmpfaengerPin);
}
Definiere eine ➨Funktion ReiheAnzeigen, der als Variable Zahl übergeben wird:
void ReiheAnzeigen(int Zahl)
{
Serial.print("Einmaleins der ");
Serial.println(Zahl);
for (int i = 1; i <= 10; i ++)
{
Serial.print(i);
Serial.print(" * ");
Serial.print(Zahl);
Serial.print(" = ");
Serial.print(i * Zahl);
Serial.println();
}
Serial.println("-----------------------");
}
Im loop-Teil musst du jede Taste mit if einzeln abfragen und die Funktion ReiheAnzeigen aufrufen:
void loop()
{
// Daten lesen
if (IrReceiver.decode())
{
// kurzes delay, damit nur eine Taste gelesen wird
delay(200);
// 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)
{
// je nach Wert Zahl an die Funktion ReiheAnzeigen() übergeben
switch (IrReceiver.decodedIRData.command)
{
// Taste 1
case 22:
ReiheAnzeigen(1);
break;
// Taste 2
case 25:
ReiheAnzeigen(2);
break;
// Taste 3
case 13:
ReiheAnzeigen(3);
break;
// Taste 4
case 12:
ReiheAnzeigen(4);
break;
// Taste 5
case 24:
ReiheAnzeigen(5);
break;
// Taste 6
case 94:
ReiheAnzeigen(6);
break;
// Taste 7
case 8:
ReiheAnzeigen(7);
break;
// Taste 8
case 28:
ReiheAnzeigen(8);
break;
// Taste 9
case 90:
ReiheAnzeigen(9);
break;
default:
break;
}
}
}
}
Verwandte Anleitungen:
- Labyrinth-Spiel mit TFT und Fernbedienung
- Interrupt: Lauflicht mit Fernbedienung
- LEDs mit Fernbedienung schalten
- Würfeln einstellige 7-Segment-Anzeige und Fernbedienung
Letzte Aktualisierung: