Hallo zusammen,
nachdem mein neues Mainboard keinen seriellen Port mehr hat und das kürzlich erworbene IgorPlug (auf dem Board) nicht zuverlässig erkannt wird, kam mir heute eine spontane quick-and-dirty-Lösung in den Sinn, damit die beste Ehefrau von allen heute doch auf dem neuen VDR ihren Tatort schauen kann:
Ein Arduino Pro Micro (Leonardo im Miniaturformat, erhältlich z.B. bei http://www.watterott.com/de/Pro-Micro-5V/16MHz mit schnellerem Versand oder billig und langsam in China bei http://www.ebay.de/itm/291035885597) kann dank seines ATMega32u4-Controllers bequem eine Tastatur emulieren. Alles, was dazu benötigt wird, findet sich in den neueren IDEs: http://arduino.cc/en/Reference/MouseKeyboard
Die Keyboard-Bedienbarkeit ist bei den meisten VDR-Distributionen oder Installationspaketen bereits gegeben.
Also schnell dazu die IRLib geholt (http://tech.cyborg5.com/irlib/), einen TSOP1736 dazu, die Fernbedienung mit dem Beispielcode der IRLib (IRanalyse) ausgelesen, ein paar Zeilen Code, fertig. Folgendes kommt dabei für meine TT-Fernbedienungen heraus:
#include <IRLib.h>
int buttonPin = 2; // Jumper auf Pin2/GND, damit für Programmierung Programm unterbrochen werden kann
int RECV_PIN = 9; // Anschluss Data-Pin TSOP1736
char value=0; // 8bit-Variable für die niedrigsten Bits
IRrecv My_Receiver(RECV_PIN);
IRdecode My_Decoder;
IRdecodeHash My_Hash_Decoder;
void setup()
{
pinMode(buttonPin, INPUT); // Jumper-Pin als Input
digitalWrite(buttonPin, HIGH); // PullUp fuer definierte Pegel
My_Receiver.enableIRIn(); // Start des IR-Empfangs
}
void loop() {
if (My_Receiver.GetResults(&My_Decoder)) //Put results into My_Decoder
{
My_Hash_Decoder.copyBuf(&My_Decoder); //copy the results to the hash decoder
My_Decoder.decode();
value=My_Decoder.value; // Reduktion auf 8bit
if (digitalRead(buttonPin) == 0) // bei gesetztem Jumper
{
switch (value) {
case 0x4d:
Keyboard.press(KEY_UP_ARROW);
delay(10);
Keyboard.release(KEY_UP_ARROW);
break;
case 0x51:
Keyboard.press(KEY_DOWN_ARROW);
delay(10);
Keyboard.release(KEY_DOWN_ARROW);
break;
case 0x4e:
Keyboard.press(KEY_LEFT_ARROW);
delay(10);
Keyboard.release(KEY_LEFT_ARROW);
break;
case 0x50:
Keyboard.press(KEY_RIGHT_ARROW);
delay(10);
Keyboard.release(KEY_RIGHT_ARROW);
break;
case 0x4f:
Keyboard.press(KEY_RETURN);
delay(10);
Keyboard.release(KEY_RETURN);
break;
case 0x59:
Keyboard.print("m");
break;
case 0x43:
Keyboard.print("1");
break;
case 0x44:
Keyboard.print("2");
break;
case 0x45:
Keyboard.print("3");
break;
case 0x46:
Keyboard.print("4");
break;
case 0x47:
Keyboard.print("5");
break;
case 0x48:
Keyboard.print("6");
break;
case 0x49:
Keyboard.print("7");
break;
case 0x4a:
Keyboard.print("8");
break;
case 0x4b:
Keyboard.print("9");
break;
case 0x4c:
Keyboard.print("0");
break;
case 0x41:
Keyboard.print("p");
break;
case 0x54:
Keyboard.press(KEY_F1);
delay(10);
Keyboard.release(KEY_F1); //RED
break;
case 0x55:
Keyboard.press(KEY_F2);
delay(10);
Keyboard.release(KEY_F2);//GREEN
break;
case 0x56:
Keyboard.press(KEY_F3);
delay(10);
Keyboard.release(KEY_F3);//YELLOW
break;
case 0x57:
Keyboard.press(KEY_F4);
delay(10);
Keyboard.release(KEY_F4);//BLUE
break;
case 0x65:
Keyboard.press(KEY_F12);
delay(10);
Keyboard.release(KEY_F12);//Vol+
break;
case 0x66:
Keyboard.press(KEY_F11);
delay(10);
Keyboard.release(KEY_F11);//Vol-
break;
case 0x58:
Keyboard.press(KEY_F10);
delay(10);
Keyboard.release(KEY_F10);//Mute
break;
case 0x53:
Keyboard.press(KEY_BACKSPACE);
delay(10);
Keyboard.release(KEY_BACKSPACE);//Exit
break;
}
delay(100);
My_Receiver.resume();
}
}
}
Alles anzeigen
Bitte das ganze nicht als perfektes Produkt verstehen, sondern eher als proof of concept. Benutzbar ist es so, um die Tastenwiederholungen kümmere ich mich in den nächsten Tagen. Die Einschränkungen sind auch bekannt (Play/Stop/User1/...). Auf jeden Fall ist so yaVDR OOTB verwendbar, wenn einem weitere Hardware für IR gerade fehlt.
Beste Grüße
Dirk