Lauf­licht mit der Keyes-Fernbedienung

Lese­zeit: 7 Minu­ten
Navi­ga­ti­on

Die Tas­ten der Fern­be­die­nung sol­len ver­wen­det wer­den um das Lauf­licht zu steu­ern.

Tas­te 1 → die LEDs leuch­ten nach­ein­an­der für 100 ms,
Tas­te 2 → die LEDs leuch­ten nach­ein­an­der für 100 ms vor und zurück
Tas­te 3 → LEDs blin­ken nacheinander 

Benö­tig­te Bauteile:

  • 5 LEDs
  • 5 Wider­stän­de > 100 Ω
  • Infrarot-Empfänger
  • Keyes-Fernbedienung
  • 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 des Infrarotempfängers.

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

Die Fern­be­die­nung sen­det beim Druck auf die Tas­ten einen Zahlencode.

Die Tas­ten­codes bezie­hen sich auf die Keyes-Fernbedienung. Die Tas­ten­codes ande­rer Fern­be­die­nun­gen kannst du mit Hil­fe des Seri­el­len Moni­tors her­aus­fin­den. Außer­dem wer­den die Codes nicht immer zuver­läs­sig gele­sen, des­halb musst du manch­mal die Tas­te mehr­mals drücken.

Tas­ten­codes Keyes-Fernbedienung

obenlinksrechtsuntenOK1234
167369251672060516761405167547751671244516738455167506951675681516724175
56789+0#
1671805516743045167160151672621516734885167287651673080516732845

Bevor du star­ten kannst, musst du eine Biblio­thek instal­lie­ren:

Sketch → Biblio­thek ein­bin­den → Biblio­the­ken ver­wal­ten

Suche nach der Biblio­thek IRre­mo­te, bewe­ge die Maus in das ent­spre­chen­de Feld und ...

… kli­cke auf Instal­lie­ren.

Die Tas­ten­codes belie­bi­ger Fern­be­die­nun­gen kannst du mit fol­gen­dem Pro­gramm her­aus­fin­den. Sie wer­den im Seri­el­len Moni­tor angezeigt. 

// Bibliothek einbinden 
# include <IRremote.h>

// der Empfänger ist an Pin 13 angeschlossen 
int IREmpfaenger = 13; 

// EmpfaengerLesen liest den Wert der gedrückten Taste  
IRrecv EmpfaengerLesen(IREmpfaenger); 

// der empfangene Code wird unter Ergebnis abgespeichert 
decode_results Ergebnis; 

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

  // der IR-Empfänger wird gestartet  
  EmpfaengerLesen.enableIRIn(); 
} 

void loop()  
{  
  // wenn Daten empfangen werden   
  // werden sie als Dezimalzahl(DEC) gespeichert  
  if (EmpfaengerLesen.decode(&Ergebnis))   
  {  
    Serial.println(Ergebnis.value, DEC);     
    EmpfaengerLesen.resume();   
  }
}

Für die Keyes-Fernbedienung sieht das Pro­gramm so aus:

# include <IRremote.h>

// der Empfänger ist an Pin 13 angeschlossen
int IREmpfaenger = 13;

// EmpfaengerLesen liest den Wert
IRrecv EmpfaengerLesen(IREmpfaenger);

// der empfangene Code wird unter Ergebnis abgespeichert
decode_results Ergebnis;

int Zahl;

void setup()
{
  Serial.begin(9600);
  EmpfaengerLesen.enableIRIn();
}

void loop()
{
  if (EmpfaengerLesen.decode(&Ergebnis))
  {  
  delay(200);

  switch (Ergebnis.value)
  {
    // Taste 0
   case 16730805:  
     Zahl = 0;
     Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
     break;

  // Taste 1
  case 16738455:
    Zahl = 1;
    Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
    break;

  // Taste 2
  case 16750695:
    Zahl = 2;
    Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
    break;

  // Taste 3
  case 16756815:
    Zahl = 3;
    Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
    break;

  // Taste 4
  case 16724175:
    Zahl = 4;
    Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
    break;

  // Taste 5
  case 16718055:
    Zahl = 5;
   Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
   break;

  // Taste 6
  case 16743045:
    Zahl = 6;
    Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
    break;

  // Taste 7
  case 16716015:
    Zahl = 7;
    Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
    break;

  // Taste 8
  case 16726215:
    Zahl = 8;
    Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
    break;

  // Taste 9
  case 16734885:
    Zahl = 9;
    Serial.println(String(Ergebnis.value, DEC) + "\t" + String(Zahl));
    break;
  }
  EmpfaengerLesen.resume();
}

Ein wei­te­res Beispiel:

Durch Drü­cken der Tas­te Pfeil nach oben wird eine LED ein­ge­schal­tet, Pfeil nach unten schal­tet sie wie­der aus.

# include <IRremote.h> 

// der Empfänger ist an Pin 13 angeschlossen 
int IREmpfaenger = 13; 

// EmpfaengerLesen liest den Wert  
IRrecv EmpfaengerLesen(IREmpfaenger); 

// der empfangene Code wird unter Ergebnis abgespeichert 
decode_results Ergebnis; 
int LED = 7; 

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

  // der IR-Empfänger wird gestartet 
  EmpfaengerLesen.enableIRIn(); 
  pinMode(LED, OUTPUT); 
} 

void loop()  
{  
  // wenn Daten empfangen werden   
  // werden sie als Dezimalzahl(DEC) gespeichert 
  if (EmpfaengerLesen.decode(&Ergebnis))    
  {   
    // Anzeige der gedrückten Taste       
    Serial.println(Ergebnis.value, DEC);  

   // Taste Pfeil oben   
   if (Ergebnis.value == 16736925)     
   {    
     digitalWrite(LED,HIGH);    
   }   

   // Taste Pfeil unten   
   if (Ergebnis.value == 16754775)   
   {     
     digitalWrite(LED,LOW);   
   }   

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

Die Tas­ten der Fern­be­die­nung sol­len das Lauf­licht steuern:

Tas­te 1 → die LEDs leuch­ten nach­ein­an­der für 100 ms

Tas­te 2  → die LEDs leuch­ten nach­ein­an­der für 100 ms vor und zurück

Tas­te 3 → LEDs blin­ken nacheinander 

Begin­ne mit der Programmierung.

Schrei­be ➨Metho­den für die den Tas­ten der Fern­be­die­nung zuge­ord­ne­ten Ereignisse:

LED­Blin­ken()
Lauf­licht­Hin()
Lauf­licht­Hi­n­Und­Her()
Lauf­licht­Mit­Blin­ken()

void LEDBlinken(int LEDNummer, int Anzahl)
{
  for (int zaehler = 0; zaehler <= Anzahl; zaehler ++)
  {
    digitalWrite(LEDNummer, HIGH);
    delay(Leuchtdauer);
    digitalWrite(LEDNummer, LOW);
    delay(Leuchtdauer);
  }
}
void LauflichtHin() 
{ 
  for (int i = 0; i ˋ<= 4; i ++)  
  {   
    digitalWrite(LED[i], HIGH); 
    delay(Leuchtdauer); 
    digitalWrite(LED[i], LOW);
  } 
}

Ver­wen­de die Metho­de Lauf­licht­Hin() als Vor­la­ge für die übri­gen Methoden.

void LauflichtHinUndHer()
{
for (int i = 0; i <;= 4; i ++) 
  {
    digitalWrite(LED[i], HIGH);
    delay(Leuchtdauer);
    digitalWrite(LED[i], LOW);
  } 

  // und wieder zurück
  for (int i = 4; i >= 0; i--) 
  {
    . . .
  }
}

Die Metho­de LauflichtMitBlinken:

void LauflichtMitBlinken() 
{ 
  for (int i = 0; i <= 4; i++)  
  {   
    int Anzahl = random(1, 5); 

    /* aktuelle LED i einschalten 
      → Methode LEDBlinken aufrufen   
    */   
    LEDBlinken(LED[i], Anzahl);
  } 
} 

Im setup-Teil wird der Infrarot-Empfänger gestar­tet, die pin­Mo­des der LEDs mit einem ➨Array fest­ge­legt und der Zufalls­ge­ne­ra­tor gestartet.

# include <IRremote.h> 

// Array mit 5 Elementen und den zugehörigen Ports 
int LED[5] = {3, 4, 5, 6, 7}; 

int EMPFAENGER = 13; 
IRrecv irrecv(EMPFAENGER); 
decode_results Ergebnis; 

int Leuchtdauer = 100; 
int Anzahl = 1; 

Im loop-Teil musst du zunächst die Tas­ten­codes abfra­gen und anschlie­ßend die Tas­ten­codes mit ➨switch auswerten:

void loop()
{
  if (irrecv.decode(&amp;Ergebnis))
  {
    switch (Ergebnis.value)   
    {     
      // Taste 1    
      case 16738455:    
        for (int i = 0; i < Anzahl; i ++)         
        {         
          LauflichtHin();  
        }         
        break;         

      // Taste 2 → LEDs leuchten vor und zurück   
      case 16750695:  
        for (int i = 0; i < Anzahl; i ++)         
        {         
          LauflichtHinUndHer();  
        }         
        break;   

      // Taste 3 → LEDs blinken nacheinander     
      case 16756815:        
        . . .    
        . . .       
    }
  } 
}


Ver­wand­te Aufgaben:


Letzte Aktualisierung: 22. Nov 2020 @ 8:53