Steuerung für IR-Code-Erkennung

IR-Sensor PIN-Erkennung:

In diesem Programm kann ein geheimer PIN gespeichert werden. So muss erst der PIN mit Hilfe der Fernsteuerung eingegeben werden, damit eine Aktion (Servodrehung) ausgeführt wird.

Steuerung für IR-Sensor Tasten-Erkennung

 

/*Dieses Programm kann auf den Arduino geladen werden, um die Tasten der IR-Fernbedienung auszulesen.*/

///////////////////////////////////*DEFINITIONEN*///////////////////////////////////
#include <IRremote.h>
int reciver = 4; //Der IR-Empfänger wird am Pin 4 ausgelesen

IRrecv irrecv(reciver);
decode_results results;

///////////////////////////////////*SETUP*///////////////////////////////////
void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
}

///////////////////////////////////*LOOP*///////////////////////////////////
void loop() {
  if (irrecv.decode(&results)){
    Serial.println(results.value, HEX);
    irrecv.resume();
  }
}

 

 

///////////////////////////////////*DEFINITIONEN*///////////////////////////////////
/*IR-DEFINITONEN*/
#include <IRremote.h> //Bibliotheke des IR-Empfängers wurd eingefügt
unsigned long MUTE_TASTE = 0xFFE21D;  //Definition der MUTE-Taste
unsigned long POWER_TASTE = 0xFFA25D; //Definition der POWER-Taste
int reciver = 4; //An diesem Pin wird der IR-Empfänger ausgelesen
IRrecv irrecv(reciver);
decode_results results;

///////////////////////////////////*SETUP*///////////////////////////////////
void setup() {
  Serial.begin(9600); //Start der seriellen Kommunikation

  /*IR*/
  irrecv.enableIRIn(); //Wird benötigt um den IR-Empfänger auszulesen
}

///////////////////////////////////*LOOP*///////////////////////////////////
void loop() {
  /*IR*/
  KNOPFKontrolle_1(); //Startet Funktion, welche prüft, ob ein bestimmter Knopf an der Fernsteuerung gedrückt wurde
  KNOPFKontrolle_2(); //Startet Funktion, welche prüft, ob ein bestimmter Knopf an der Fernsteuerung gedrückt wurde
}

///////////////////////////////////*WEITERE FUNKTIONEN*///////////////////////////////////
  /*MELDUNG*/
void Signal1(){
   /*Hier kann ein Programm stehen, welches ausgeführt wird, wenn die MUTE-Taste gedrückt wurde. Dieses Programm gibt im seriellen Monitor (Werkzeuge) eine Textmeldung aus.*/
  Serial.println("Die MUTE-Taste wurde gedrückt"); //Meldung im seriellen Monitor (Werkzeuge), dass die MUTE-Taste gedrückt wurde
  delay(1000); //Wartet 1sec nach dem Ausführen
}

void Signal2(){
   /*Hier kann ein Programm stehen, welches ausgeführt wird, wenn die POWER-Taste gedrückt wurde. Dieses Programm gibt im seriellen Monitor (Werkzeuge) eine Textmeldung aus.*/
  Serial.println("Die POWER-Taste wurde gedrückt"); //Meldung im seriellen Monitor (Werkzeuge), dass die POWER-Taste gedrückt wurde
  delay(1000); //Wartet 1sec nach dem Ausführen
}

  /*IR*/  
void KNOPFKontrolle_1(){
  if (irrecv.decode(&results)){
      irrecv.resume();
  }
  if (results.value == MUTE_TASTE){
    Signal1(); //Wird ausgeführt, wenn die MUTE-Taste gedrückt wurde
    results.value = 0xFFFFFF; //results.value braucht diesen Wert, damit die Funktion Signal1(); nicht ohne erneute Überprüfung ausgeführt wird
  }
}

void KNOPFKontrolle_2(){
  if (irrecv.decode(&results)){
    irrecv.resume();
  }
  if (results.value == POWER_TASTE){
    Signal2(); //Wird ausgeführt, wenn die POWER-Taste gedrückt wurde
    results.value = 0xFFFFFF; //results.value braucht diesen Wert, damit die Funktion Signal2(); nicht ohne erneute Überprüfung ausgeführt wird
  }
}

 

Programmcode für IR-Sensor PIN-Erkennung

 

///////////////////////////////////*DEFINITIONEN*///////////////////////////////////
/*IR-DEFINITONEN*/
#include <IRremote.h> //Bibliotheke des IR-Empfängers wird eingefügt

/* WICHTIG: Der PIN darf keine Zifferwiederholungen nacheinander ausfeisen. Beispiel 1122 geht nicht. 1212 geht.*/

unsigned long PINZAHL1 = 0xFF30CF;    // Pinzahl 1 entspricht der Taste 1 (0xFF30CF), was nach belieben verändert werden kann
unsigned long PINZAHL2 = 0xFF18E7;    // Pinzahl 2 entspricht der Taste 2 (0xFF18E7), was nach belieben verändert werden kann
unsigned long PINZAHL3 = 0xFF7A85;    // Pinzahl 3 entspricht der Taste 3 (0xFF7A85), was nach belieben verändert werden kann
unsigned long PINZAHL4 = 0xFF10EF;    // Pinzahl 4 entspricht der Taste 4 (0xFF10EF), was nach belieben verändert werden kann

int cnt = 0; //den counter braucht es bei der PIN-Überprüfung
int reciver = 4; //An diesem Pin wird der IR-Empfänger ausgelesen
IRrecv irrecv(reciver);
decode_results results;

///////////////////////////////////*SETUP*///////////////////////////////////
void setup() {
  Serial.begin(9600); //Start der seriellen Kommunikation

  /*IR*/
  irrecv.enableIRIn(); //Wird benötigt um den IR-Empfänger auszulesen
}

///////////////////////////////////*LOOP*///////////////////////////////////
void loop() {
  /*IR*/
  PINKontrolle(); //Durchläuft die PIN-Kontrolle
}

///////////////////////////////////*WEITERE FUNKTIONEN*///////////////////////////////////
  /*IR*/  
void PINKontrolle(){
  /*Aufbau: Auslesen des Werts im IR-Empfänger. Anschliessend Vergleich des IR-Werts mit dem gespeicherten PIN. Abhängig vom PIN-Code und der momentanen Eingabe schreitet das Porgramm voran. Ist der PIN korrekt, wird die Funktion Signal1(); ausgeführt.*/
  if (irrecv.decode(&results)){
  irrecv.resume();
  }
  if (results.value == PINZAHL1 && cnt == 0 && results.value != 0xFFFFFFFF){
    cnt++;
    MonitorKontrolle();
    }
  if (results.value == PINZAHL2 && cnt == 1 && results.value != PINZAHL1 && results.value != 0xFFFFFFFF){
    cnt++;
    MonitorKontrolle();
    }
  else if (results.value != PINZAHL1 && cnt == 1 && results.value != 0xFFFFFFFF){
    cnt = 0;
    MonitorKontrolle();
    }
  if (results.value == PINZAHL3 && cnt == 2 && results.value != PINZAHL2 && results.value != 0xFFFFFFFF){
    cnt++;
    MonitorKontrolle();
    }
  else if (results.value != PINZAHL2 && cnt == 2 && results.value != 0xFFFFFFFF){
    cnt = 0;
    MonitorKontrolle();
    }
  if (results.value == PINZAHL4 && cnt == 3 && results.value != PINZAHL3 && results.value != 0xFFFFFFFF){
    cnt++;
    MonitorKontrolle();
    Signal1();
    delay(1000); //1 Sekunde Pause
    cnt = 0;
    }
  else if (results.value != PINZAHL3 && cnt == 3 && results.value != 0xFFFFFFFF){
    cnt = 0;
    MonitorKontrolle();
    }
}

void MonitorKontrolle(){
  /*Diese Programm wird lediglich zur Kontrolle benötigt. Es gibt den jeweiligen Stand in der PIN-Eingabe in seriellen Monitor an.*/
    Serial.print("IR-Signal = "); //schreibt "IR-Signal = "
    Serial.print(results.value, HEX); //Gibt den momentanen IR-Wert als Hexadezimalzahl aus
    Serial.print(" and counter = "); //schreibt " and counter = "
    Serial.println(cnt); //Gibt den momentanen counter-Wert aus und wechlselt den Cursor um eine Zeile
}

void Signal1(){
  /*Hier kann ein Programm stehen, welches ausgeführt wird, wenn die PIN korrekt eingegeben wurde. Dieses Programm gibt im seriellen Monitor (Werkzeuge) eine Textmeldung aus.*/
  Serial.println("PIN korrket eingegeben!");
}

 

IR-Code-Erkennung:

Dieser Code wird benötigt, um von einer Infrarotfernsteuerung die Tastersignale auszulesen. Die Signale können im seriellen Monitor ausgelesen werden und notiert werden. Die so erhaltenen Hexadezimalzahlen (0xFF4AB5) können genützt werden, um beispielsweise einen PIN-Code zu programmieren.

IR-Sensor Tasten-Erkennung:

Wenn der IR-Sensor einen bestimmten Wert ausliest, kann eine Aktion ausgeführt werden. Wird beispielsweise die MUTE-Taste auf der Fernsteuerung gedrückt, soll ein Servo eine Drehbewegung machen.