Salve ragazzi!
Oggi preso dalla noia e stufo del fatto che sono a corto di idee, ho deciso di tornare sulla mitica libreria IRremote.
Ho imparato a mandare i codici in raw in modo da avere una compatibilità universale sbirciando qui. Fra le ultime righe dice che basta creare un arrai di raw nel quale va eliminato il primo codice ottenuto e portati positivi tutti i codici negativi. Funziona!
Ora però volevo fare qualcosa che riceve, memorizza e manda in continuazione. Quindi ho modificato il codice di IRrecvDump (commento la parte modificata):
#include <IRremote.h>
int RECV_PIN = 11;
IRsend led; //mio led
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
}
void dump(decode_results *results) {
int count = results->rawlen;
Serial.print("Raw (");
Serial.print(count, DEC);
Serial.print("): {");
unsigned int code[count]; //vettore per i raw
for (int i = 1; i < count; i++) { //parto da 1 per eliminare il primo codice
if ((i % 2) == 1) {
Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
code[i]=results->rawbuf[i]*USECPERTICK; //carico
}
else {
Serial.print((int)results->rawbuf[i]*USECPERTICK, DEC); //ho tolto il "-"
code[i]=(int)results->rawbuf[i]*USECPERTICK; //carico
}
Serial.print(",");
}
Serial.println("};");
delay(5000);
Serial.print(count); //stampo per sicurezza la lunghezza
Serial.print(" ");
for (int x = 1; x < count; x++) { //stampo ad uno ad uno i codici per sicurezza
Serial.print(code[x]);
Serial.print(",");
}
Serial.println("");
while(1){ //invio continuo di..
for (int c = 0; c < 3; c++) {
led.sendRaw(code, count,38); //vettore di codici lungo count e con frequenza 38
delay(40);
}
delay(5000);
}
}
void loop() {
if (irrecv.decode(&results)) {
dump(&results);
irrecv.resume(); // Receive the next value
}
}
ES:
Raw (68): {4500,4350,650,1600,650,1600,600,1600,650,500,600,500,600,500,650,500,600,500,650,1600,600,1600,650,1600,600,500,650,500,600,500,650,450,650,500,600,500,650,1600,600,500,650,500,600,1600,650,500,600,500,650,450,650,1600,650,450,650,1600,650,1600,600,500,600,1650,650,1550,650,1600,600,};
68 4500,4350,650,1600,650,1600,600,1600,650,500,600,500,600,500,650,500,600,500,650,1600,600,1600,650,1600,600,500,650,500,600,500,650,450,650,500,600,500,650,1600,600,500,650,500,600,1600,650,500,600,500,650,450,650,1600,650,450,650,1600,650,1600,600,500,600,1650,650,1550,650,1600,600,
Come vedete non fa altro che salvare il vettore per poi iniviarlo.. nel confronto sul seriale sembra coincidere tutto, non ci sono errori, però effettivamente il televisore non riceve niente!
La cosa assurda è che se in un codice a parte invio il raw preso dal codice precedente il televisore riceve!
#include <IRremote.h>
IRsend led;
unsigned int code[68] = {4500,4350,650,1600,650,1600,600,1600,650,500,600,500,600,500,650,500,600,500,650,1600,600,1600,650,1600,600,500,650,500,600,500,650,450,650,500,600,500,650,1600,600,500,650,500,600,1600,650,500,600,500,650,450,650,1600,650,450,650,1600,650,1600,600,500,600,1650,650,1550,650,1600,600};
void setup()
{
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 3; i++) {
led.sendRaw(code, 68,38);
delay(40);
}
delay(5000);
}