Bei­spiel­pro­gramm Keyes-Fernbedienung

Lese­zeit: 4 Minu­ten

Das Bei­spiel­pro­gramm zeigt, wie du eine Keyes-Fern­be­die­nung mit einem Ardui­no ver­wen­den kannst.

Benö­tig­te Bauteile:

  • Infra­rotem­pfän­ger
  • Keyes Fern­be­die­nung
  • Lei­tungs­dräh­te

Baue die Schal­tung auf:
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Ach­te auf die Pin­be­le­gung der Infrarotempfänger:

Ach­te dar­auf, dass die Bat­te­rie rich­tig ein­ge­legt wur­de. Der Minus-Pol liegt oben.

Für die Ver­wen­dung des Infra­rotem­pfän­gers und der Fern­be­die­nung benö­tigst du eine Biblio­thek:

Suche die Biblio­thek 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 Zahlencode.

Tas­ten­codes Keyes-Fernbedienung

Pfeil oben
Tas­ten­code70
Pfeil linksTas­te OKPfeil rechts
Tas­ten­code686467
Pfeil unten
Tas­ten­code21
Tas­te 1Tas­te 22Tas­te 3
Tas­ten­code222513
Tas­te 4Tas­te 5Tas­te 6
Tas­ten­code122494
Tas­te 7Tas­te 8Tas­te 9
Tas­ten­code82890
Tas­te *Tas­te 0Tas­te #
Tas­ten­code668274

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

Die Aus­ga­be im Seri­el­len Monitor:

Test­pro­gramm für belie­bi­ge Fernbedienungen:

# include "IRremote.h"

int EmpfaengerPin = 11;

void setup()
{
  Serial.begin(9600);

  // Empfänger starten
  IrReceiver.begin(EmpfaengerPin);
}

void loop()
{
  // Daten lesen
  if (IrReceiver.decodedIRData.address == 0)
  {

    if (IrReceiver.decode())
    {
      /*
        printIRResultMinimal zeigt die verwendete Taste
        P = Protokoll
        C = Kommando in Hex
      */

      Serial.print(F("P = Protokoll C = Taste hexadezimal: "));
      IrReceiver.printIRResultMinimal(&Serial);
      Serial.print(F(" Dezimal: "));
      Serial.println(IrReceiver.decodedIRData.command);

      delay(200);

      // nächsten Wert lesen
      IrReceiver.resume();
      
    }
  }
}

LED mit Fern­be­die­nung schalten

Die Schal­tung wird mit einer LED an Pin 7 erwei­tert.
Die LED wird ein­ge­schal­tet, wenn die Tas­te 1 der Fern­be­die­nung gedrückt wird, Tas­te 2 schal­tet die LED wie­der aus.

So sieht es aus:

Das Pro­gramm:

# include "Rremote.h"

int EmpfaengerPin = 11;

// Pin der LED
int LED = 7;

void setup() 
{
  IrReceiver.begin(EmpfaengerPin);
  pinMode(LED, OUTPUT);
}

void loop()
{
  // Daten lesen
  if (IrReceiver.decode())
  {
    // nächsten Wert lesen
    IrReceiver.resume();

    if (IrReceiver.decodedIRData.address == 0)
    {
      // Taste 1 -> gelesener Deizimalwert 22 -> LED einschalten
      if (IrReceiver.decodedIRData.command == 22) digitalWrite(LED, HIGH);

      // Taste 2 -> gelesener Deizimalwert 25 -> LED ausschalten
      if (IrReceiver.decodedIRData.command == 25) digitalWrite(LED, LOW);
    }
  }
}

Letzte Aktualisierung: 29. Sep 2023 @ 9:31