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.
/*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 } }
///////////////////////////////////*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.