Problemi lettura segnale infrarossi

Ho un problema cercando di leggere i dati da un telecomando infrarossi, ed è già la seconda volta che mi capita con 2 telecomandi diversi.
Sto usando un programma che mi scrive su seriale il dato letto, con il telecomando della tv vedo i valori, mentre con un’altro telecomando mi scrive sempre ‘0’ indifferentemente dal tasto premuto (al posto di ritrovarmi dei valori esadecimali)…
lo sketch è questo (ma se ne trovano un sacco simili):

#include <IRremote.h> // use the library
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup()
{
  Serial.begin(9600); // for serial monitor output
  irrecv.enableIRIn(); // Start the receiver
}
void loop()
{
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
    irrecv.resume(); // receive the next value
  }  // Your loop can do other things while waiting for an IR command
}

il ricevitore infrarossi è come questo, con l’out collegato al pin 11

Ho già fatto delle analisi:

  • il programma e le connessioni vanno bene perchè con un altro telecomando funziona.
  • la batteria del secondo telecomando è carica, quindi non ci sono problemi di alimentazione.
  • il led infrarossi funziona perchè l’ho provato guardandolo da webcam.

Però ora non so quindi dove andare a sbattere, potrebbe essere che il telecomando usi una frequenza che non riesco a rilevare?
oppure c’è un modo per pulire o migliorare il segnale del ricevitore?

Ho scoperto che quando scrive ‘0’ è perchè non ha riconosciuto il tipo di telecomando\protocollo produttore… (fonte: http://www.pjrc.com/teensy/td_libs_IRremote.html)
prendendo spunto da qui: http://scuola.arduino.cc/it/content/infrarossi-controlla-arduino-telecomando ho modificato il programma in modo da leggere dei dati. purtroppo però nemmeno così ho sempre lo stesso dato premendo lo stesso tasto, quindi non sono in grado di distinguerli…
qui il codice modificato:

#include <IRremote.h> // use the library
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
unsigned int rawCodes[RAWBUF];

int codeLen; // The length of the code

void setup()
{
  Serial.begin(9600); // for serial monitor output
  irrecv.enableIRIn(); // Start the receiver
}
void loop()
{
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    //Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
    codeLen = results.rawlen - 1;
    // To store raw codes:
    // Drop first value (gap)
    // Convert from ticks to microseconds
    // Tweak marks shorter, and spaces longer to cancel out IR receiver distortion
    for (int i = 1; i <= codeLen; i++) {
      if (i % 2) {
        // Mark
        rawCodes[i - 1] = results.rawbuf[i]*USECPERTICK - MARK_EXCESS;
        Serial.print(" m");
      } 
      else {
        // Space
        rawCodes[i - 1] = results.rawbuf[i]*USECPERTICK + MARK_EXCESS;
        Serial.print(" s");
      }
      Serial.print(rawCodes[i - 1], DEC);
    }
    Serial.println("");
    irrecv.resume(); // receive the next value
  }  // Your loop can do other things while waiting for an IR command
}

Oltre che il codice del telecomando potrebbe essere uno non conosciuto e decodificato dal Sketch Arduino.
Potrebbe essere anche che la frequenza di moduazione non é la stessa. Lo standard é 38kHz ma esistono ricevitori della serie TSOP da 30kHz a 54kHz.

Ciao Uwe