Forse il titolo risulta un po' strano, ma non è nient'altro che usare Arduino per trasmettere comandi ad una periferica, una soundbar, usando un solo telecomando, quello del TV.
In pratica voglio alzare e abbassare il volume e mettere in mute, la soundbar, usando il solo telecomando del tv, usando i tasti Mute, Vol+ e Vol-.
Usando la libreria Irremote di Ken Shirriff, ho codificato i comandi provenienti dal tv, che sono stati riconosciuti come tipo Nec, ho poi registrato la sequenza di impulsi provenienti dal telecomando della soundbar dei rispettivi comandi e tutto va bene, provando le singole trasmissioni di impulsi, la soundbar risponde.
Infatti con questo semplice sketch:
/*
IR decoder encoder con tastiera pc
*/
#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
IRsend irsend;
decode_results results;
unsigned int mute[68]={
4550,4350,650,450,650,450,650,1550,700,1550,650,450,650,1550,
700,400,700,450,650,450,650,450,650,1550,700,1550,650,450,650,1550,650,450,700,450,650,
1550,700,1500,700,1550,650,1550,650,1550,700,450,650,450,650,450,650,450,650,450,650,
450,700,450,650,450,650,1550,650,1550,700,1550,650};
unsigned int Volpiu[68]={
4600,4300,650,450,650,450,700,1550,650,1550,650,450,650,1600,
650,450,650,450,650,450,650,450,650,1600,650,1550,650,450,650,1600,650,450,650,450,650,
1550,650,1600,650,1550,650,450,650,1550,700,450,650,450,650,450,650,450,650,450,700,400,
700,1550,650,450,650,1550,700,1550,650,1550,650};
unsigned int Volmeno[68]={
4600,4300,650,450,700,400,650,1600,650,1550,650,450,700,1500,
700,450,650,450,700,400,650,450,700,1550,650,1550,650,450,700,1500,700,450,650,450,650,
450,700,1500,700,1550,650,450,700,1500,650,450,700,450,650,450,650,1550,650,450,700,400,
700,1550,650,450,700,1500,700,1550,650,1550,650};
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
irrecv.blink13(true);
}
void loop() {
char ch = Serial.read();
switch(ch){
case('*' ):
{
irsend.sendRaw(mute,68,38);
delay(100);
}
break;
case('+' ):
{
irsend.sendRaw(Volpiu,68,38);
delay(100);
}
break;
case('-' ):
{
irsend.sendRaw(Volmeno,68,38);
delay(100);
}
break;
}
}
tutto funziona usando i comandi da tastiera + - e * senza blocchi alcuni.
Il problema si crea quando invece uso il telecomando del tv e devo riconoscere il comando ricevuto e trasmetto il rispettivo comando secondo il seguente sketch:
/*
IR decoder encoder
riceve una codifica da un telecomandoe trasmette una codifica diversa per una periferica
*/
#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
IRsend irsend;
decode_results results;
unsigned int mute[68]={4550,4350,650,450,650,450,650,1550,700,1550,650,450,650,1550,
700,400,700,450,650,450,650,450,650,1550,700,1550,650,450,650,1550,650,450,700,450,650,
1550,700,1500,700,1550,650,1550,650,1550,700,450,650,450,650,450,650,450,650,450,650,
450,700,450,650,450,650,1550,650,1550,700,1550,650};
unsigned int Volpiu[68]={4600,4300,650,450,650,450,700,1550,650,1550,650,450,650,1600,
650,450,650,450,650,450,650,450,650,1600,650,1550,650,450,650,1600,650,450,650,450,650,
1550,650,1600,650,1550,650,450,650,1550,700,450,650,450,650,450,650,450,650,450,700,400,
700,1550,650,450,650,1550,700,1550,650,1550,650};
unsigned int Volmeno[68]={4600,4300,650,450,700,400,650,1600,650,1550,650,450,700,1500,
700,450,650,450,700,400,650,450,700,1550,650,1550,650,450,700,1500,700,450,650,450,650,
450,700,1500,700,1550,650,450,700,1500,650,450,700,450,650,450,650,1550,650,450,700,400,
700,1550,650,450,700,1500,700,1550,650,1550,650};
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
irrecv.blink13(true);
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
if (results.value == 0x20df906f) {
Serial.println ("Mute");
irsend.sendRaw(mute,68,38);
delay(100);
}
if (results.value == 0x20df40bf) {
Serial.println ("Vol+");
irsend.sendRaw(Volpiu,68,38);
delay(100);
}
if (results.value == 0x20dfc03f) {
Serial.println ("Vol-");
irsend.sendRaw(Volmeno,68,38);
delay(100);
}
irrecv.resume(); // Receive the next value
}
}
si blocca quando riceve uno dei comandi da trasmettere, quindi quando premo Mute, si blocca tutto, senza ricevere più comandi, come frizzato, solo quando chiudo la console e la riapro tutto riparte senza problemi, ma non devo premere i tre comandi incriminati.
Ho provato a cambiare i pin di ricezione e trasmissione, ma niente, si blocca sempre.
Se qualcuno ha già provato questa libreria può avere qualche idea per risolvere il problema ??
Grazie