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);
}
}
}









