Infrarotempfänger und Infrarotfernbedienung

In diesem Artikel zeige ich Dir, wie Du Signale einer Infrarotfernbedienung auswerten kannst. Im folgenden Beispiel möchte ich drei LEDs sowie einen Piezo-Lautsprecher über eine Infrarotfernbedienung steuern. Zunächst die Liste mit Modulen und Materialien, welche wir im Beispiel verwendet haben:

Mittels der Fernbedienung sollen über die Tasten 1-3 die rote, gelbe und grüne LED eingeschaltet bzw. ausgeschaltet werden. Über die Taste 4 soll der Piezo-Lautsprecher einen Ton ausgeben. Die Tasten sollen dabei so funktionieren, dass der erste Tastendruck den entsprechenden Pin auf HIGH und der nachfolgende wieder auf LOW setzt.

Zunächst bauen wir folgende Schaltung auf:

 

Aufbau meiner Schaltung auf dem Breadboard:

 

Hier der Sketch für die Programmierung:

#include <IRrecv.h>
#include <IRremoteESP8266.h>

const int IRPin = D2;
const int ledRedPin = D5;
const int ledYellowPin = D6;
const int ledGreenPin = D7;
const int ledAlarmPin = D8;

// KeyCodes
const int MyKey1 = 16724175;
const int MyKey2 = 16718055;
const int MyKey3 = 16743045;
const int MyKey4 = 16716015;

IRrecv ir_reciver(IRPin);
decode_results results;

boolean ledRedStatus=false;
boolean ledYellowStatus=false;
boolean ledGreenStatus=false;
boolean AlarmStatus=false;

void setup() {
  // Start Infrared Reciver
  ir_reciver.enableIRIn();

  // Setup Pins
  pinMode(ledRedPin, OUTPUT);
  pinMode(ledYellowPin, OUTPUT);
  pinMode(ledGreenPin, OUTPUT);
  pinMode(ledAlarmPin, OUTPUT);  

  Serial.begin(9600);
}

void loop() {
  if (ir_reciver.decode(&results))
  {
    ir_reciver.resume();
    int KeyValue = results.value;
    Serial.println(KeyValue);
    switch (results.value) {
      case MyKey1:
        switchLightRed();
        break;
      case MyKey2:
        switchLightYellow();
        break;
      case MyKey3:
        switchLightGreen();
        break;        
      case MyKey4:
        switchAlarmOnOff();
        break;                   
      default:
        Serial.println("KEY_CODE not defined!");
        break;
    }
  }
}

void switchAlarmOnOff() {
  if (AlarmStatus) {
    digitalWrite(ledAlarmPin, LOW);
  }
  else {
    digitalWrite(ledAlarmPin, HIGH);
  }
  AlarmStatus = !AlarmStatus;
}

void switchLightRed() {
  if (ledRedStatus) {
    digitalWrite(ledRedPin, LOW);
  }
  else {
    digitalWrite(ledRedPin, HIGH);
  }
  ledRedStatus = !ledRedStatus;
}

void switchLightYellow() {
  if (ledYellowStatus) {
    digitalWrite(ledYellowPin, LOW);
  }
  else {
    digitalWrite(ledYellowPin, HIGH);
  }
  ledYellowStatus = !ledYellowStatus;
}

void switchLightGreen() {
  if (ledGreenStatus) {
    digitalWrite(ledGreenPin, LOW);
  }
  else {
    digitalWrite(ledGreenPin, HIGH);
  }
  ledGreenStatus = !ledGreenStatus;
}

 

 

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich akzeptiere