Wird eine beliebige Taste auf der Fernbedienung gedrückt, würfelt das Programm eine Zahl und zeigt sie auf dem 7-Segment-Display an. Kurz angezeigte Zufallszahlen simulieren den Würfelvorgang, bevor die endgültig gewürfelte Zahl angezeigt wird.
So sieht es aus:
Benötigte Bauteile:
- Keyes Fernbedienung
- Infrarotempfänger
- Lautsprecher
- einstellige 7-Segment-Anzeige
- Leitungsdrähte
Die Zahlen, die dargestellt werden sollen, werden als Binärwert notiert. Eine 1 steht für Segment einschalten, eine 0 zeigt das Segment nicht an. Die Reihenfolge der Ziffern entspricht der Reihenfolge der Pins. Die erste Ziffer schaltet Pin 2, die zweite Pin 3 und die letzte Pin 9.
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.
Arduino IDE 2x:
🔗Umwandlung von Zahlensystem (externer Link, abgerufen am 19.2.23)
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 für die Keyes-Fernbedienung 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.
#include "IRremote.h"
byte Zahlen[6] =
{
B01100000, // 1
B11001101, // 2
B11101001, // 3
B01100011, // 4
B10101011, // 5
B10101111, // 6
};
int EmpfaengerPin = 11;
int LAUTSPRECHER = 10;
Der setup-Teil. Beachte die Kommentare.
void setup()
{
// Pins auf OUTPUT setzen
for (int i = 2; i <= 9; i++) {
pinMode(i, OUTPUT);
}
// Infrarot-Empfänger starten
IrReceiver.begin(EmpfaengerPin);
// Zufallsgenerator starten
randomSeed(analogRead(A0));
Serial.begin(9600);
}
Der loop-Teil. Beachte die Kommentare.
void loop()
{
/*
der Bereich der Zahlen 1 bis 6
als oberer Wert muss 7 angegeben werden,
weil immer nach unten gerundet wird
*/
int Minimum = 1;
int Maximum = 7;
// Daten lesen -> beliebige Taste gedrückt
if (IrReceiver.decode())
{
/*
printIRResultMinimal zeigt die verwendete Taste
P = Protokoll
C = Kommando in Hex
auskommentiert lassen wenn die Tastencodes bekannt sind
Serial.print(F("P = Protokoll C = Taste hexadezimal: "));
IrReceiver.printIRResultMinimal(&Serial);
Serial.print(F(" Dezimal: "));
Serial.println(IrReceiver.decodedIRData.command);
*/
delay(100);
// nächsten Wert lesen
IrReceiver.resume();
// Würfeleffekt
// in schneller Folge werden 10 Zufallszahlen angezeigt
for (int i = 0; i < 10; i++)
{
// gewürfelte Zahl anzeigen
byte Zahl = ZufallsZahl(Minimum, Maximum);
delay(100);
ZahlZeigen(Zahlen[Zahl - 1]);
}
tone(LAUTSPRECHER, 1000, 10);
}
}
Im loop-Teil wird die Funktion ZahlZeigen() aufgerufen. Als Parameter wird ihr ein Element des Arrays Zahlen – eine der Binärwerte für die Zahl 9 bis 0 – übergeben.
void ZahlZeigen(byte ArrayZahl)
{
// Bits des Arrays ArrayZahl prüfen
// von Pin 2 bis Pin 9 durchlaufen
for (int i = 2; i <= 9; i++)
{
/*
vergleicht das Byte ArrayZahl mit dem Byte B10000000
befindet sich an beiden Positionen eine 1
das Ergebnis der Prüfung ist also nicht 0
-> Segment einschalten
ist eine der Positionen eine 0
das Ergebnis der Prüfung ist 0
-> Segment ausschalten
1 Bit nach links schieben -> nächstes Bit prüfen
nach 8 Durchläufen sind alle Segmente (Pins) richtig geschaltet
*/
if ((ArrayZahl & B10000000) != 0) digitalWrite(i, HIGH);
else digitalWrite(i, LOW);
ArrayZahl = ArrayZahl << 1;
}
}
Verwandte Anleitungen:
- Automatische Tür mit Hall-Sensoren
- Countdown mit einer einstelligen 7-Segment-Anzeige
- Countdown mit einem OLED-Display
- Datum und Zeit mit dem NTP-Protokoll anzeigen
- ESP32-Wroom – BMP280/DHT Zeit und Messdaten auf TFT anzeigen
- Farbenspiele mit einer RGB-Matrix
- Glücksrad mit NeoPixel-Ring
- Labyrinth-Spiel mit TFT und Fernbedienung
- Labyrinthspiel mit Joystick und TFT
- Länder-Info
- LED-Matrix - Countdown
- LED-Matrix - Joystick-Spiel
- LED-Matrix - Lauflicht
- LED-Matrix Würfeln
- Lottozahlen - Anzeige auf einem LCD
- Lottozahlen - Anzeige auf einem OLED-Display
- Multiplikations-Taschenrechner
- Spiel mit einer RGB-Matrix
- Spielautomat mit einer RGB-Matrix
- Taschenrechner Grundrechenarten
- Würfeln - Anzeige auf einem OLED-Display
- Würfelspiel mit einer vierstelligen Anzeige
- Würfeln mit einer einstelligen Anzeige
Letzte Aktualisierung: