IR: Ricevo codice,memorizzo codice, trasmetto


salve ragazzi!

oggi preso dalla noia e stufo del fatto che sono corto di idee, ho deciso di tornare sulla mitica libreria irremote.
ho imparato mandare 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 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): 
code: [select]


#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 raw
 
  (int = 1; < 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("  ");
 
  (int x = 1; x < count; x++) {  //stampo ad uno ad uno codici per sicurezza
    serial.print(code[x]);
    serial.print(",");
  }
  serial.println("");
 
  while(1){                         //invio continuo di..
  (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 next value
  }
}


es:
code: [select]
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 parte invio il raw preso dal codice precedente il televisore riceve!

code: [select]

#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() {

    (int = 0; < 3; i++) {
      led.sendraw(code, 68,38);
      delay(40);
    }
   
    delay(5000);

}






dovete scusarmi ma la faccenda si fa sempre più strana..
oggi scuola ho pensato che il problema potesse essere negli indici del vettore che creo. quando lo carico infatti esso parte dalla cella 1, solo che se lo faccio partire dalla cella 0 non cambia niente.

la cosa strana sta nel fatto che, se copio il loop del codice che posto sotto in un qualsiasi punto dello sketch non funziona, mentre se lo metto in un altro sketch che fa solo questo, funziona maledettamente  ]:)

code: [select]

#include <irremote.h>

irsend led;

void setup()
{
  serial.begin(9600);
}

void loop() {

  delay(1000);
  unsigned int cd[24] = {900,850,950,800,1800,850,900,850,950,800,950,800,950,1700,1800,850,900,850,950,800,950,800,1000};
                       
  (int c = 0; c < 3; c++) {
      led.sendraw(cd, 24,38); 
      delay(40);
  }
  serial.println("invio");
  delay(1000); 
 
}


Arduino Forum > International > Italiano > Generale (Moderator: leo72) > IR: Ricevo codice,memorizzo codice, trasmetto


arduino

Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial