Lauf­licht mit der Keyes-Fernbedienung

Lese­zeit: 8 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 nach­ein­an­der

Benö­tig­te Bau­tei­le:

  • 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 Infra­ro­tem­pfän­gers.

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 Zah­len­code.

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 ange­zeigt.

// 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 Bei­spiel:

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 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 nach­ein­an­der

Begin­ne mit der Pro­gram­mie­rung.

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

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 Metho­den.

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 Lauf­licht­Mit­Blin­ken:

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 gestar­tet.

# 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 aus­wer­ten:

void loop()
{
  if (irrecv.decode(&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 Auf­ga­ben:


Letzte Aktualisierung: 21. Mrz 2020 @ 13:23