
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.
Benötigte Bauteile:
- Keyes Fernbedienung
- Infrarotempfänger
- Lautsprecher
- einstellige 7‑Segment-Anzeige
- Widerstände 220 Ω
- 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 | ||
| 70 (0x46) | ||
| Pfeil links | Taste OK | Pfeil rechts |
| 68 (0x44) | 64 (0x40) | 67 (0x43) |
| Pfeil unten | ||
| 21 (0x15) | ||
| Taste 1 | Taste 2 | Taste 3 |
| 22 (0x16) | 25 (0x19) | 13 (0xD) |
| Taste 4 | Taste 5 | Taste 6 |
| 12 (0xC) | 24 (0x18) | 94 (0x5E) |
| Taste 7 | Taste 8 | Taste 9 |
| 8 (0xB) | 28 (0x1C) | 90 (0x5A) |
| Taste * | Taste 0 | Taste # |
| 66 (0x42) | 82 (0x52) | 74 (0x4A) |

⇒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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | // benötigte Bibliothek einbinden #include “IRremote.hpp” // 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include “IRremote.hpp” 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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:
- Laplace-Versuch
- LED-Matrix Würfeln
- Lottozahlen — Anzeige auf einem LCD
- Lottozahlen mit einem Ethernet-Shield
- Lottozahlen mit WiFi und NTP
- Lottozahlen — Anzeige auf einem OLED-Display
- Lottozahlen auf eine SD-Karte schreiben
- Lottozahlen mit Zeitstempel anzeigen und auf einer SD-Karte speichern
- Schneckenrennen
- Würfeln mit der LED-Matrix UNO R4 WiFi
Letzte Aktualisierung:






