Infrarot Library für Fernbedienungen nach dem NEC Protokoll
BSD lizensierte Empfangs-Bibliothek für ATMega und ATTiny / AVR-GCC
Da ich leider im Internet keinen Code mit entsprechender Lizensierung finden konnte habe ich mir kurzerhand meine eigene Funktionsbibliothek geschrieben. Die Implementierung benötigt einen Interrupt sowie einen 8-Bit Timer und funktioniert auf einem ATMega48, ATMega88, ATMega168, ATMega328 sowie ATTiny2313 und ATTiny4313.
Im Interrupt wird mit einer Statemachine gearbeitet um das Signal zu decodieren. Das Signal wird komplett ausgewertet und auf Fehler überprüft. Außerdem kann ausgelesen werden, ob der Benutzer die Taste gedrückt hält. Die Bibliothek kommt bei verschiedenen von mir entwickelten Bausätzen und Projekten zum Einsatz.
Benutzung der Bibliothek
Die entsprechenden Timer- und Interrupteinstellungen werden mit folgendem Aufruf initialisiert:
ir_init();
Nun liegt das zuletzt empfangene Paket in einer struct ir_struct bereit, welche in der globalen Variable ir abrufbar ist. Diese beinhaltet Adresse, Kommando sowie ein Status Flag. Das Bit IR_RECIEVED des Flags wird gesetzt wenn ein gültiges Paket empfangen wurde und muss im Hauptprogramm nach erfolgter Verarbeitung zurückgesetzt werden. Solange die Taste gehalten wird, ist das Bit IR_KEYHOLD gesetzt.
Die Verarbeitung könnte etwa so aussehen:
if(ir.status & (1<<IR_RECEIVED)) {
// Remote address ok?
if(ir.address==42) {
switch(ir.command) {
case 64:
// Do something useful
break;
// [...]
}
}
// Reset state
ir.status &= ~(1<<IR_RECEIVED);
}
Sollte kein Empfang mehr gewünscht sein, so können die Interrupts durch folgenden Aufruf wieder angehalten werden:
ir_stop();
Video
Download
Weiterführende Links
- IR Remote Control, NEC Protocol Description
- A Multi-Protocol Infrared Remote Library for the Arduino