Ir zender en ontvanger
9 berichten
• Pagina 1 van 1
Ir zender en ontvanger
Projectje ik heb alternative tv setup, een HDtv ontvanger(amino 140) verbonden met een hdmi monitor en bijna klassieke NAD hifi reciever voor de audio.
ik met geen mogelijkheid het geluid regelen met de codes standaard in de amino afstanbediening zit.
Geen mogelijkheid, een arduino met een IR ontvanger en een IR zender zou dat een vertaal slag kunnen maken toch.
met de voorbeeld programmatjes kan ik de codes ontvangen en codes zenden en de reciever reageert er op.
nu de vraag hoe maak je een tabel van hexadecimale code aan de ontvanger kant dat de andere kant de zender op de juiste manier aan stuurd.
ik met geen mogelijkheid het geluid regelen met de codes standaard in de amino afstanbediening zit.
Geen mogelijkheid, een arduino met een IR ontvanger en een IR zender zou dat een vertaal slag kunnen maken toch.
met de voorbeeld programmatjes kan ik de codes ontvangen en codes zenden en de reciever reageert er op.
nu de vraag hoe maak je een tabel van hexadecimale code aan de ontvanger kant dat de andere kant de zender op de juiste manier aan stuurd.
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Ir zender en ontvanger
Als ik het goed begrijp:
a) De amino afstandbediening kan niet de audio uit van de HDtv ontvanger regelen waardoor de NAD ook niet mee veranderd?
b) Nu wil je de audio codes die de afstandbediening uitzendt omzetten in IR signalen waar de NAD op reageert?
Klopt dit?
a) De amino afstandbediening kan niet de audio uit van de HDtv ontvanger regelen waardoor de NAD ook niet mee veranderd?
b) Nu wil je de audio codes die de afstandbediening uitzendt omzetten in IR signalen waar de NAD op reageert?
Klopt dit?
Re: Ir zender en ontvanger
Inmiddels een hoop geleerd over afstandbedieningen elke fabrikant heeft wel zijn eigen protocol. Is het protocol bekend dan is het makkelijk een code in hexadecimaal te ontvangen en te versturen. Is het protocol niet bekend dan kan je eventueel Rawdata gebruiken.
In mijn geval heb ik NEC tv protocol in de tv ontvanger AB gezet, een philips protocol was niet erg stabiel.
de protocol van de NAD reciever werd niet herkend en dan heeft het versturen van een hex code geen zin. daar maak ik nu gebruik van een opgevangen Rawdata.
cpp code
Mijn vraag nu , dit programma vertaalt maar 1 keer daarna niet meer , na een reset van de nano ook een keer.
wat doe ik nu fout.
Alvast dank.
In mijn geval heb ik NEC tv protocol in de tv ontvanger AB gezet, een philips protocol was niet erg stabiel.
de protocol van de NAD reciever werd niet herkend en dan heeft het versturen van een hex code geen zin. daar maak ik nu gebruik van een opgevangen Rawdata.
cpp code
//Infrarood afstanbediening vertaler. input Hex codes volgens bekend protocol versturen van opgenomen rawdata.
// codes en rawdata gevonden met IRrecvDump.
// ontvanger aan pin 11 zender aan pin 3
//in ir vertaler geeft serialmonitor geeft ontvvangen hexcodesweer.
//A powerNAD rawData[67] = {8900,4450, 550,1700, 500,1750, 500,1700, 550,650, 500,550, 500,650, 500,600, 500,1750, 500,600, 500,650, 450,1700, 550,1700, 550,1700, 500,1700, 550,1700, 550,800, 550,550, 550,550, 550,600, 500,750, 500,600, 500,600, 500,600, 500,1750, 550,1700, 500,1700, 500,1700, 550,1700, 550,1700, 500,1700, 550,1700, 500,700, 500}; // UNKNOWN 3C2A47EE
//B muteNAD rawData[67] = {8850,4500, 500,1700, 550,1700, 550,1650, 550,600, 500,650, 500,600, 500,600, 500,1750, 550,550, 500,650, 500,1700, 500,1700, 550,1700, 550,1700, 500,1700, 550,800, 550,600, 500,650, 450,1700, 500,750, 550,1700, 500,600, 500,600, 500,1750, 550,1650, 550,1700, 500,600, 550,1700, 500,600, 550,1650, 500,1750, 550,650, 500}; // UNKNOWN 550E35AE
//C auxNAD rawData[67] = {8950,4400, 600,1650, 500,1700, 650,1600, 600,550, 600,500, 600,500, 500,650, 600,1600, 500,600, 650,450, 650,1600, 600,1650, 550,1650, 650,1600, 600,1600, 500,850, 500,1750, 600,1650, 600,500, 600,1650, 550,1650, 550,550, 600,500, 650,1600, 600,500, 650,500, 500,1700, 650,550, 500,650, 600,1600, 500,1750, 600,600, 500}; // UNKNOWN BA4A61C
//D upNAD rawData[67] = {8950,4400, 500,1750, 550,1650, 600,1650, 500,650, 500,600, 500,600, 550,600, 500,1700, 600,500, 500,650, 500,1700, 500,1750, 500,1700, 550,1700, 500,1700, 550,800, 600,550, 500,600, 500,600, 650,1600, 600,500, 600,500, 500,650, 500,1700, 500,1750, 600,1650, 550,1650, 500,700, 500,1750, 500,1700, 550,1700, 600,600, 600}; // UNKNOWN F450E39
//E downNAD rawData[67] = {8900,4450, 550,1700, 500,1700, 500,1750, 550,600, 550,600, 450,650, 500,600, 550,1650, 550,600, 500,600, 500,1700, 550,1700, 500,1700, 550,1700, 550,1700, 500,900, 450,600, 500,650, 450,1750, 550,1650, 550,600, 550,550, 500,650, 450,1750, 500,1700, 550,1700, 500,650, 500,700, 500,1700, 550,1700, 500,1700, 500,750, 500}; // UNKNOWN 49D7DA06
#include <IRremote.h>
#define LED_PIN 13
IRrecv irrecv(11);
IRsend irsend;
decode_results results;
long workresult = 0; //Werkvariabele, zodat de Ir vast verder kan
//Raw codes onderstaande zelf invullen en voor ieder volgende regel een nieuw signaal maken. B.v. irSignalB[]
unsigned int irSignalA[] = {8900,4450, 550,1700, 500,1750, 500,1700, 550,650, 500,550, 500,650, 500,600, 500,1750, 500,600, 500,650, 450,1700, 550,1700, 550,1700, 500,1700, 550,1700, 550,800, 550,550, 550,550, 550,600, 500,750, 500,600, 500,600, 500,600, 500,1750, 550,1700, 500,1700, 500,1700, 550,1700, 550,1700, 500,1700, 550,1700, 500,700, 500};
unsigned int irSignalB[] = {8850,4500, 500,1700, 550,1700, 550,1650, 550,600, 500,650, 500,600, 500,600, 500,1750, 550,550, 500,650, 500,1700, 500,1700, 550,1700, 550,1700, 500,1700, 550,800, 550,600, 500,650, 450,1700, 500,750, 550,1700, 500,600, 500,600, 500,1750, 550,1650, 550,1700, 500,600, 550,1700, 500,600, 550,1650, 500,1750, 550,650, 500};
void setup()
{
pinMode(LED_PIN, OUTPUT); // Status on pin 13 LED
irrecv.enableIRIn(); // Start the receiver
Serial.begin(9600); //Keycodes gevonden, dan disablen
}
void loop() {
int khz = 38;
workresult =0;
if (irrecv.decode(&results)) {
workresult = results.value; //copieer de code in een werkvariable
Serial.println (workresult,HEX); // Zoek keycode in terminal. klaar dan disable
irrecv.resume(); // Receive the next value
}
switch (workresult) { //schakelvoorwaarden
case 0xc: //zelf de vertaalslag invoeren
irsend.sendRaw(irSignalA, sizeof(irSignalA) / sizeof(irSignalA[0]), khz);
break;
}
switch (workresult) { //schakelvoorwaarden
case 0x801: //zelf de vertaalslag invoeren
irsend.sendRaw(irSignalA, sizeof(irSignalA) / sizeof(irSignalA[0]), khz);
break;
}
switch (workresult) { //schakelvoorwaarden
case 0xD:
irsend.sendRaw(irSignalB, sizeof(irSignalB) / sizeof(irSignalB[0]), khz);
break;
}
switch (workresult) { //schakelvoorwaarden
case 0x80D:
irsend.sendRaw(irSignalB, sizeof(irSignalB) / sizeof(irSignalB[0]), khz);
break;
}
}
Mijn vraag nu , dit programma vertaalt maar 1 keer daarna niet meer , na een reset van de nano ook een keer.
wat doe ik nu fout.
Alvast dank.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Ir zender en ontvanger
Dit :
cpp code
Mag je alvast veranderen in:
cpp code
Dat veranderd nog niet je probleem (denk ik) maar verbetert je code
cpp code
switch (workresult) { //schakelvoorwaarden
case 0xc: //zelf de vertaalslag invoeren
irsend.sendRaw(irSignalA, sizeof(irSignalA) / sizeof(irSignalA[0]), khz);
break;
}
switch (workresult) { //schakelvoorwaarden
case 0x801: //zelf de vertaalslag invoeren
irsend.sendRaw(irSignalA, sizeof(irSignalA) / sizeof(irSignalA[0]), khz);
break;
}
switch (workresult) { //schakelvoorwaarden
case 0xD:
irsend.sendRaw(irSignalB, sizeof(irSignalB) / sizeof(irSignalB[0]), khz);
break;
}
switch (workresult) { //schakelvoorwaarden
case 0x80D:
irsend.sendRaw(irSignalB, sizeof(irSignalB) / sizeof(irSignalB[0]), khz);
break;
}
Mag je alvast veranderen in:
cpp code
switch (workresult) { //schakelvoorwaarden
case 0xc: //zelf de vertaalslag invoeren
irsend.sendRaw(irSignalA, sizeof(irSignalA) / sizeof(irSignalA[0]), khz);
break;
case 0x801: //zelf de vertaalslag invoeren
irsend.sendRaw(irSignalA, sizeof(irSignalA) / sizeof(irSignalA[0]), khz);
break;
case 0xD:
irsend.sendRaw(irSignalB, sizeof(irSignalB) / sizeof(irSignalB[0]), khz);
break;
case 0x80D:
irsend.sendRaw(irSignalB, sizeof(irSignalB) / sizeof(irSignalB[0]), khz);
break;
}
Dat veranderd nog niet je probleem (denk ik) maar verbetert je code
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Ir zender en ontvanger
Bouw eens wat println's in zodat je de verschillende stappen kan volgen. Dus nadat je een sendraw heb gedaan iets van "Case 0xD uitgevoerd"
En bij het begin van loop() iets van "begin loop" etc. Ik wil eerst eens weten of je wel terug komt uit een van die IR calls.
En bij het begin van loop() iets van "begin loop" etc. Ik wil eerst eens weten of je wel terug komt uit een van die IR calls.
Re: Ir zender en ontvanger
nicoverduin schreef:Bouw eens wat println's in zodat je de verschillende stappen kan volgen. Dus nadat je een sendraw heb gedaan iets van "Case 0xD uitgevoerd"
En bij het begin van loop() iets van "begin loop" etc. Ik wil eerst eens weten of je wel terug komt uit een van die IR calls.
Wat ik gedaan heb ik de code opgeschoond haken er uit en println er ingezet.
Nu ontvangt de arduino alles net zo lang het op de eerste en power code en dan reageert de arduino nergens meer op tot ik het gereset heb.
serial monitor ziet er zo uit.(D en 80D is afwisselend MUTE, 801 en C afwisselend is power on/off) (knop vasthouden is meerderemale de zelfde hex code in het NEC herkende protocol)
D
D
80D
D
D
D
D
801
801
C
power1nad
power1nadoff
- Code: Alles selecteren
//Infrarood afstanbediening vertaler. input Hex codes volgens bekend protocol versturen van opgenomen rawdata.
// codes en rawdata gevonden met IRrecvDump.
// ontvanger aan pin 11 zender aan pin 3
//in ir vertaler geeft serialmonitor geeft ontvangen hexcodes weer.
//A powerNAD rawData[67] = {8900,4450, 550,1700, 500,1750, 500,1700, 550,650, 500,550, 500,650, 500,600, 500,1750, 500,600, 500,650, 450,1700, 550,1700, 550,1700, 500,1700, 550,1700, 550,800, 550,550, 550,550, 550,600, 500,750, 500,600, 500,600, 500,600, 500,1750, 550,1700, 500,1700, 500,1700, 550,1700, 550,1700, 500,1700, 550,1700, 500,700, 500}; // UNKNOWN 3C2A47EE
//B muteNAD rawData[67] = {8850,4500, 500,1700, 550,1700, 550,1650, 550,600, 500,650, 500,600, 500,600, 500,1750, 550,550, 500,650, 500,1700, 500,1700, 550,1700, 550,1700, 500,1700, 550,800, 550,600, 500,650, 450,1700, 500,750, 550,1700, 500,600, 500,600, 500,1750, 550,1650, 550,1700, 500,600, 550,1700, 500,600, 550,1650, 500,1750, 550,650, 500}; // UNKNOWN 550E35AE
//C auxNAD rawData[67] = {8950,4400, 600,1650, 500,1700, 650,1600, 600,550, 600,500, 600,500, 500,650, 600,1600, 500,600, 650,450, 650,1600, 600,1650, 550,1650, 650,1600, 600,1600, 500,850, 500,1750, 600,1650, 600,500, 600,1650, 550,1650, 550,550, 600,500, 650,1600, 600,500, 650,500, 500,1700, 650,550, 500,650, 600,1600, 500,1750, 600,600, 500}; // UNKNOWN BA4A61C
//D upNAD rawData[67] = {8950,4400, 500,1750, 550,1650, 600,1650, 500,650, 500,600, 500,600, 550,600, 500,1700, 600,500, 500,650, 500,1700, 500,1750, 500,1700, 550,1700, 500,1700, 550,800, 600,550, 500,600, 500,600, 650,1600, 600,500, 600,500, 500,650, 500,1700, 500,1750, 600,1650, 550,1650, 500,700, 500,1750, 500,1700, 550,1700, 600,600, 600}; // UNKNOWN F450E39
//E downNAD rawData[67] = {8900,4450, 550,1700, 500,1700, 500,1750, 550,600, 550,600, 450,650, 500,600, 550,1650, 550,600, 500,600, 500,1700, 550,1700, 500,1700, 550,1700, 550,1700, 500,900, 450,600, 500,650, 450,1750, 550,1650, 550,600, 550,550, 500,650, 450,1750, 500,1700, 550,1700, 500,650, 500,700, 500,1700, 550,1700, 500,1700, 500,750, 500}; // UNKNOWN 49D7DA06
#include <IRremote.h>
#define LED_PIN 13
IRrecv irrecv(11);
IRsend irsend;
decode_results results;
long workresult = 0; //Werkvariabele, zodat de Ir vast verder kan
//Raw codes onderstaande zelf invullen en voor ieder volgende regel een nieuw signaal maken. B.v. irSignalB[]
unsigned int irSignalA[] = {8900, 4450, 550, 1700, 500, 1750, 500, 1700, 550, 650, 500, 550, 500, 650, 500, 600, 500, 1750, 500, 600, 500, 650, 450, 1700, 550, 1700, 550, 1700, 500, 1700, 550, 1700, 550, 800, 550, 550, 550, 550, 550, 600, 500, 750, 500, 600, 500, 600, 500, 600, 500, 1750, 550, 1700, 500, 1700, 500, 1700, 550, 1700, 550, 1700, 500, 1700, 550, 1700, 500, 700, 500};
unsigned int irSignalB[] = {8850, 4500, 500, 1700, 550, 1700, 550, 1650, 550, 600, 500, 650, 500, 600, 500, 600, 500, 1750, 550, 550, 500, 650, 500, 1700, 500, 1700, 550, 1700, 550, 1700, 500, 1700, 550, 800, 550, 600, 500, 650, 450, 1700, 500, 750, 550, 1700, 500, 600, 500, 600, 500, 1750, 550, 1650, 550, 1700, 500, 600, 550, 1700, 500, 600, 550, 1650, 500, 1750, 550, 650, 500};
void setup()
{
pinMode(LED_PIN, OUTPUT); // Status on pin 13 LED
irrecv.enableIRIn(); // Start the receiver
Serial.begin(9600); //Keycodes gevonden, dan disablen
}
void loop() {
int khz = 38;
workresult = 0;
if (irrecv.decode(&results)) {
workresult = results.value; //copieer de code in een werkvariable
Serial.println (workresult, HEX); // Zoek keycode in terminal. klaar dan disable
irrecv.resume(); // Receive the next value
}
switch (workresult) { //schakelvoorwaarden
case 0xc: // power on/off 1stecode
Serial.println ("power1nad");
irsend.sendRaw(irSignalA, sizeof(irSignalA) / sizeof(irSignalA[0]), khz);
Serial.println("power1nadoff");
break;
switch (workresult) //schakelvoorwaarden
case 0x801: // power on/off 2decode
Serial.println("power2nad");
irsend.sendRaw(irSignalA, sizeof(irSignalA) / sizeof(irSignalA[0]), khz);
Serial.println("power2nadoff");
break;
switch (workresult) //schakelvoorwaarden
case 0xD: // mute 1ste code
Serial.println("mute1");
irsend.sendRaw(irSignalB, sizeof(irSignalB) / sizeof(irSignalB[0]), khz);
Serial.print("mute1off");
break;
switch (workresult) //schakelvoorwaarden
case 0x80D : //mute 2de code
Serial.println("mute2");
irsend.sendRaw(irSignalB, sizeof(irSignalB) / sizeof(irSignalB[0]), khz);
Serial.println("mute2off");
break;
}
}
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Ir zender en ontvanger
Waarvoor heb je nu nog steeds al die switch cases? Volgens mij heb ik iets anders aangegeven
9 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: axuviwoe en 63 gasten