Ir zender en ontvanger

Arduino specifieke Software
Berichten: 9
Geregistreerd: 06 Sep 2016, 20:56

Ir zender en ontvanger

Berichtdoor Arrie » 30 Okt 2016, 22:50

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.

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ir zender en ontvanger

Berichtdoor nicoverduin » 30 Okt 2016, 23:31

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?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 9
Geregistreerd: 06 Sep 2016, 20:56

Re: Ir zender en ontvanger

Berichtdoor Arrie » 31 Okt 2016, 22:05

Helemaal goed Nico, rare tv codes omzetten naar audiocommando's.

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Ir zender en ontvanger

Berichtdoor shooter » 31 Okt 2016, 23:08

maak een array, in bytes of in tekst.
paul deelen
shooter@home.nl

Berichten: 9
Geregistreerd: 06 Sep 2016, 20:56

Re: Ir zender en ontvanger

Berichtdoor Arrie » 04 Nov 2016, 20:32

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
//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.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ir zender en ontvanger

Berichtdoor nicoverduin » 04 Nov 2016, 21:07

Dit :
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
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ir zender en ontvanger

Berichtdoor nicoverduin » 04 Nov 2016, 21:36

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.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 9
Geregistreerd: 06 Sep 2016, 20:56

Re: Ir zender en ontvanger

Berichtdoor Arrie » 05 Nov 2016, 21:31

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

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ir zender en ontvanger

Berichtdoor nicoverduin » 06 Nov 2016, 13:38

Waarvoor heb je nu nog steeds al die switch cases? Volgens mij heb ik iets anders aangegeven
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: axuviwoe en 63 gasten