Drucken

Steuerung einer Funksteckdose (Grundlagen siehe RF Link) über eine TV Fernbedienung mit Hilfe von Arduino

 

Hardware

Arduino

Arduino Proto Shield

RF Link 434 MHz Sender

TSOP1738

Zusammengebaut

 

 

 

IR Codes auslesen

Zum Auslesen der IR Codes folgende Bibliothek verwenden: A Multi-Protocol Infrared Remote Library for the Arduino
Demoprogramm: IRrecvDump

Liefert bei einer Panasonic Fernbedienung folgende IR Codes:

Taste Code (hex) VCR Code (hex) DVD
down ACA1 ACA5
up 2C21 2C25
reverse 929F 4049
forward 525F COC9
stop D 9
pause 606D 6069
play 505D 5059

 

Sourcecode

include "IRremote.h"
int RECV_PIN = 9; IRrecv irrecv(RECV_PIN); decode_results results;

short rc_pin=4; // data pin of sender short vc_pin=5; // power pin of sender

void setup() {

 irrecv.enableIRIn();     // Start the receiver
 pinMode(rc_pin, OUTPUT);
 pinMode(vc_pin, OUTPUT);
}

void loop() {

 if (irrecv.decode(&results)) {
   digitalWrite(vc_pin, HIGH); // power on sender
   TIMSK2 &= ~(1<<TOIE2);      // deactivate timer 
   switch(results.value) {
     case 0x5059: //play
     case 0x505D:
       sendCode("010001011100001111010001"); // Code[On]  3
       break;
     case 0x9: //stop
     case 0xD:
       sendCode("010001001010101011100011"); // Code[On]  1
       break;
     case 0xACA5: //up
     case 0xACA1:
       sendCode("010010011000110001110011"); // Code[Off] 1
       break;
     case 0x2C25: //down
     case 0x2C21:
       sendCode("010000000101011000011010"); // Code[On]  2
       break;
     case 0x4049: //reverse
     case 0x929F:
       sendCode("010000110011100101101010"); // Code[Off] 2
       break;
     case 0xC0C9: //forward
     case 0x525F:
       sendCode("010000010001101110010001"); // Code[Off] 3
       break;
     case 0x6069: //break
     case 0x606D:
       sendCode("010001001010101011101101"); // Code[Off] Master
       break;
   }
   TIMSK2 |= (1<<TOIE2); // activate timer
   digitalWrite(vc_pin, LOW); // power off sender
   irrecv.resume(); // Receive the next value
 }
}

boolean sendCode(char code[]){

 for(short z = 0; z<6; z++){
   for(short i = 0; i<24; i++){
     sendByte(code[i]);
   }
   sendByte('x');
 }
 return true;
}

void sendByte(char i) {

 switch(i){
 case '0':
   {
     digitalWrite(rc_pin,HIGH);
     delayMicroseconds(1000);
     digitalWrite(rc_pin,LOW);
     delayMicroseconds(500);
     return;
   }
 case '1':
   {
     digitalWrite(rc_pin,HIGH);
     delayMicroseconds(500);
     digitalWrite(rc_pin,LOW);
     delayMicroseconds(1000);
     return;
   }
 case 'x':
   {
     digitalWrite(rc_pin,HIGH);
     delayMicroseconds(3000);
     digitalWrite(rc_pin,LOW);
     delayMicroseconds(7000);
   }
 }
}