irremote e dimensione dati ricezione

Salve a tutti, sono giorni che credo di aver letto di tutto su come aumentare la dimensione del buffer di ricezione della libreria IRRemote, il problema è che non ci sono riuscito :( Ho bisogno di un buffer di almeno 439, ma con ogni modifica fatta, non riesco ad arrivarci! Ho provato a modificare su IRRemoteInt.h MAXBUF a 450, ma continua a leggermi al max 132 valori, ho modificato la struct irparams_t con

uint16_t rawlen;

ma niente... più di 132 non ne vuol sapere di leggerne... Qualcuno è riuscito a modificarla e mi indicherebbe le modifiche effettuate?

grazie 1000

Che versione della libreria ? Nel file IRRemoteInt.h c'e' un RAWBUF a 101 , non c'e' nessun MAXBUF

nid69ita: Che versione della libreria ? Nel file IRRemoteInt.h c'e' un RAWBUF a 101 , non c'e' nessun MAXBUF

Si scusa, ho modificato il RAWBUF ma non è cambiato nulla... La versione della libreria è l'ultima, scaricata sabato da github

Grazie 1000

Non saprei. Ma hai provato a chiudere IDE quando hai fatto la modifica e POI riaprire IDE e ricompilare ?

Perchè anche qui parlano di aumentare quella variabile (topic in inglese): http://forum.arduino.cc/index.php?topic=207517.msg1534426#msg1534426

magari sbaglio io qualcosa, ma l’output che ottengo dal telecomando è questo:

Unknown encoding: 9DCF5C22(32 bits)
#define Something_DEC 2647612450
#define Something_HEX 9DCF5C22
Raw (132): -30272 3450 -1750 450 -450 400 -1300 400 -450 450 -450 400 -450 400 -450 400 -450 450 -450 400 -450 400 -450 400 -450 450 -450 400 -450 400 -1350 400 -450 400 -450 400 -450 450 -450 400 -450 400 -450 400 -450 450 -1300 400 -1300 450 -1300 400 -450 400 -450 450 -1300 400 -450 450 -450 400 -450 400 -450 400 -450 450 -450 400 -450 400 -450 400 -450 450 -450 400 -450 400 -450 400 -450 450 -450 400 -450 400 -450 450 -400 450 -450 400 -450 400 -450 450 -450 400 -450 400 -450 400 -450 450 -450 400 -450 400 -450 400 -450 450 -450 400 -450 400 -1300 450 -1300 400 -450 400 -450 450 -450 400 -450 400 -450 450

al quale rimuovo ovviamente il primo numero e il simbolo del meno, lo carico in un unsigned int array e lo do in pasto a sendRaw… e non funziona…

googlando ho trovato questo che è funzionate:
{3500,1750,435,435,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,1300,435,1300,435,435,435,435,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,1300,435,435,435,435,435,435,435,435,435,435,435,9950,3500,1750,435,435,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,1300,435,1300,435,435,435,435,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,435,435,435,435,1300,435,435,435,435,435,435,435,435,435,435,435,1300,435,435,435,1300,435,435,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,435,435,1300,435,435,435,435,435,435,435,1300,435,435,435,1300,435,435,435,435,435,1300,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,1300,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,1300,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,1300,435,1300,435,435,435,1300,435,435,435,1300,435,1300,435};

la temperatura è diversa (nel mio esempio è freddo 25°, mentre in quello trovato su internet è 20°) ma la lunghezza dell’array è decisamente maggiore di quella che leggo io con il sensore, motivo per cui mi viene da puntare il dito sulla dimensione del buffer

Della variabile results, prova a stampar anche il valore results.rcvstate se vale STATE_OVERFLOW ovvero 6 allora va oltre al limite del buffer

P.S. ma se faccio una domanda, la risposta ?

nid69ita: Della variabile results, prova a stampar anche il valore results.rcvstate se vale STATE_OVERFLOW ovvero 6 allora va oltre al limite del buffer

results mi dà errore: 'class decode_results' has no member named 'rcvstate'

guardando infatti la dichiarazione della classe non vi è alcun membro rcvstate... ho trovato però overflow che mi ritorna 0

nid69ita: P.S. ma se faccio una domanda, la risposta ?

scusa, hai ragione... comunque si dopo aver modificato il sorgente di IRremoteInt.h ho chiuso e riaperto IDE... per scrupolo ho aggiunto anche un Serial.println(RAWBUF) per verificarne il valore ed è corretto (450)

Ho appena scaricato la IRRemote con IDE 1.6.10, libreria di shriffin. Dentro al file IRRemoteInt.h c'e':

#define RAWBUF  101  // Maximum length of raw duration buffer

typedef
    struct {
        // The fields are ordered to reduce memory over caused by struct-padding
        uint8_t       rcvstate;        // State Machine state

Prova ad eliminare dalle librerie standard, (quelle che vengono fornite con l’IDE) la cartella libraries\RobotIRremote

si l'avevo già eliminata la RobotIRremote, uso l'ide 1.7.10 ma io il rcvstate ce l'ho su:

typedef
    struct {
        // The fields are ordered to reduce memory over caused by struct-padding
        uint8_t       rcvstate;        // State Machine state
        uint8_t       recvpin;         // Pin connected to IR data from detector
        uint8_t       blinkpin;
        uint8_t       blinkflag;       // true -> enable blinking of pin on IR processing
        uint8_t       rawlen;          // counter of entries in rawbuf
        unsigned int  timer;           // State timer, counts 50uS ticks.
        unsigned int  rawbuf[RAWBUF];  // raw data
        uint8_t       overflow;        // Raw buffer overflow occurred
    }
irparams_t;

mentre la decode_results:

class decode_results
{
    public:
        decode_type_t          decode_type;  // UNKNOWN, NEC, SONY, RC5, ...
        unsigned int           address;      // Used by Panasonic & Sharp [16-bits]
        unsigned long          value;        // Decoded value [max 32-bits]
        int                    bits;         // Number of bits in decoded value
        volatile unsigned int  *rawbuf;      // Raw intervals in 50uS ticks
        int                    rawlen;       // Number of records in rawbuf
        int                    overflow;     // true iff IR raw code too long
};

comunque ho visto che posso leggere un'istanza della irparams_t, ma con:

Serial.println(irparams.rcvstate);

ottengo come valore di ritorno 5, che corrisponde a:

#define STATE_STOP      5

Okay, sbagliavo a indicarti la variabile di base. Se è 5 in teoria non c'e' overflow. Non saprei dirti.

Percaso vuoi decodificare il segnale di un telecomando per condizionatori d'aria?

In ogni caso prova lo sketch usato qui http://www.analysir.com/blog/2014/03/19/air-conditioners-problems-recording-long-infrared-remote-control-signals-arduino/

zoomx: Percaso vuoi decodificare il segnale di un telecomando per condizionatori d'aria?

In ogni caso prova lo sketch usato qui http://www.analysir.com/blog/2014/03/19/air-conditioners-problems-recording-long-infrared-remote-control-signals-arduino/

esattamente! Voglio decodificare l'IR di un telecomando di un condizionatore panasonic... Ho provato quel codice, ma non mi è chiaro su quale pin devo collegare il ricevitore IR :( Tu l'hai mai usato con arduino uno?

grazie 1000

zoomx: Percaso vuoi decodificare il segnale di un telecomando per condizionatori d'aria?

In ogni caso prova lo sketch usato qui http://www.analysir.com/blog/2014/03/19/air-conditioners-problems-recording-long-infrared-remote-control-signals-arduino/

Ci sono riuscito! Mi sono studiato il codice che hai postato, in particolare gli interrupts ed ho capito che dovevo collegare il ricevitore IR al pin2 che corrisponde all'interrupt 0 utilizzano nello sketch. Il programma mi ha ritornato il codice da inviare al codizionatore e questa volta ha funzionato perfettamente!

Grazie veramente tantissimo!

Scusa se ti rispondo solo adesso.

Si l'avevo già provato con un condizionatore e c'ero riuscito ecco perché ti ho consigliato quello sketch.