LEDs mit Fern­be­die­nung schalten

Lese­zeit: 6 Minu­ten

Lösung
Seite als PDF

Das Pro­gramm kann über die Tas­ten der Fern­be­die­nung jede LED ein­zeln ein- und aus­schal­ten, alle gemein­sam schal­ten und ein Lauf­licht starten.

  • die Tas­ten 1 bis 7 schal­ten jeweils eine LED
  • 🠔 Lauf­licht nach links
  • ➞ Lauf­licht nach rechts
  • # alle LEDs ausschalten

So sieht es aus:

Benö­tig­te Bauteile:

  • Infra­rotem­pfän­ger
  • Keyes Fern­be­die­nung
  • LEDs
  • Wider­stän­de 220 Ω
  • 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.

Benö­tig­te Bibliothek:

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

⇒Tas­ten­codes Open­Smart Fernbedienung

⇒Test­pro­gramm belie­bi­ge 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 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");
    }
  }
}

Bin­de die benö­tig­te Biblio­thek ein und defi­nie­re die Variablen.

// benötigte Bibliothek einbinden
#include "IRremote.h"

// Pin, an dem der Infrarot-Empfänger angeschlossen ist
int EmpfaengerPin = 11;

// Anzahl der LEDs
#define AnzahlLED 7

// Pins der LEDs
int LED[AnzahlLED] = { 3, 4, 5, 6, 7, 8, 9 };

// beim Start sind alle LEDs ausgeschaltet
bool LEDStatus[AnzahlLED] = { LOW, LOW, LOW, LOW, LOW, LOW, LOW };

Der set­up-Teil:

void setup() 
{
  // Infrarot-Empfänger starten
  IrReceiver.begin(EmpfaengerPin);

  // pinMode der LEDs definieren
  for(int i = 0; i < AnzahlLED; i++)
  {
    pinMode(LED[i], OUTPUT);
  }
}

Im loop-Teil musst du jede Tas­te mit ⇒switch ... case abfra­gen und die Funk­tio­nen aufrufen:

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) 
    {
      // Werte abfragen und anzeigen
      // Tasten 1-7
      switch (IrReceiver.decodedIRData.command) 
      {
        case 22:
          LEDSchalten(0);
          break;

        case 25:
          LEDSchalten(1);
          break;

        case 13:
          LEDSchalten(2);
          break;

        case 12:
          LEDSchalten(3);
          break;

        case 24:
          LEDSchalten(4);
          break;

        case 94:
          LEDSchalten(5);
          break;

        case 8:
          LEDSchalten(6);
          break;

        // *
        case 66:
          AlleAn();
          break;

        // #
        case 74:
          AlleAus();
          break;

        // Pfeil links
        case 68:
          LauflichtLinks();
          break;

        // Pfeil rechts
        case 67:
          LauflichtRechts();
          break;

        default:
          break;
      }
    }
  }
}

Jetzt feh­len noch die Funk­tio­nen LED­Schal­ten(), Lauf­licht­Links(), Lauf­licht­Rechts() AlleAn() und AlleAus().

void LEDSchalten(int LEDNummer) 
{
  // LEDStatus umkehren LOW -> HIGH, HIGH -> LOW
  LEDStatus[LEDNummer] = !LEDStatus[LEDNummer];
  digitalWrite(LED[LEDNummer], LEDStatus[LEDNummer]);
}

void LauflichtLinks() 
{
  for (int i = 0; i < AnzahlLED; i++) 
  {
    digitalWrite(LED[i], HIGH);
    delay(100);
    digitalWrite(LED[i], LOW);
    AlleAus();
  }
}

void LauflichtRechts() 
{
 for (int i = AnzahlLED; i >= 0; i--) 
  {
    digitalWrite(LED[i], HIGH);
    delay(100);
    digitalWrite(LED[i], LOW);
    AlleAus();
  }
}

void AlleAus() 
{
  // LEDs ausschalten
  // LEDStatus aller LEDs auf LOW setzen
  for (int i = 0; i < AnzahlLED; i++) 
  {
    digitalWrite(LED[i], LOW);
    LEDStatus[i] = LOW;
  }
}

void AlleAn() 
{
  // LEDs einschalten
  // LEDStatus aller LEDs auf HIGH setzen
  for (int i = 0; i < AnzahlLED; i++) 
  {
    digitalWrite(LED[i], HIGH);
    LEDStatus[i] = HIGH;
  }
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Anleitungen:


Letzte Aktualisierung: Dez 5, 2024 @ 7:23