Einmaleinsreihen - Anzeige mit Keyes-Fernbedienung

Lesezeit: 5 Minuten

Lösung
Seite als PDF

Das Programm soll zu jeder Zahlentaste der Fernbedienung die dazugehörige Einmaleinsreihe im Seriellen Monitor anzeigen.

So soll es aussehen:

Einmaleinsreihen - Anzeige im Serieller Monitor

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 ...

… kli­cke auf Instal­lie­ren.

oder: Sketch -> Biblio­thek ein­bin­den -> Biblio­the­ken verwalten

Die Fern­be­die­nung sen­det beim Druck auf die Tas­ten einen Zah­len­code.

Tastencodes Keyes-Fernbedienung

Pfeil oben
Tastencode70
Pfeil linksTaste OKPfeil rechts
Tastencode686467
Pfeil unten
Tastencode21
Taste 1Taste 22Taste 3
Tastencode222513
Taste 4Taste 5Taste 6
Tastencode122494
Taste 7Taste 8Taste 9
Tastencode82890
Taste *Taste 0Taste #
Tastencode668274

➨Tastencodes OpenSmart Fernbedienung

➨Testprogramm beliebige Fernbedienung

Die Tas­ten­codes kannst du mit fol­gen­dem Pro­gramm her­aus­fin­den. Sie wer­den im Seri­el­len Moni­tor ange­zeigt.

// 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:

switch ... case

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;
      }
    }
  }
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Verwandte Aufgaben:


Letzte Aktualisierung: 23. Okt 2023 @ 14:27