Problema nell'utilizzo ricevitore radiofrequenze 433MHZ

Salve a tutti , è da un pò che sto utilizzando il modulo ricevitore di radiofrequenze a 433mhz modello XY-MK-5V. Il mio obiettivo è quello di riuscire a leggere i comandi ricevuti da un telecomando di un cancello automatico (di casa mia) , che essendo molto vecchiotto sono certo non utilizzi tecnlologia rolling code.Il collegamento tra dispositivo è molto semplice, 3 pin di cui 1 gnd 1 5v e il pin digitale Data dal quale la scheda riceve i valori trasmessi. Per iniziare a cimentarmi ho cercato sul web e la libreria più adatta sembrava essere RCswitch con i suoi esempi demo, ma nessuno di questi purtroppo ha dato esito positivo (Nessun messaggio sul monitor seriale). Da li mi sono deciso a fare qualche tentativo senza librerie, inizialmente facendo una semplice lettura il polling all'interno del while leggendo il pin digitale e con un delay dopo la lettura , scegliendo il tempo di delay basandomi sul fatto che dal datasheet del componente elabori valori ad una velocità di 2kbit/s .(Ho prima controllato con che tempistiche venisse eseguito il while con la funzione micros() e poi modificato il delay per far eseguire il while ogni 0,0005s poichè devo leggere 2kbit/s ). Oltre a questo durante il while dopo ogni lettura viene stampato il valore su seriale, ed il risultato è stato che quando con il telecomando non premevo pulsanti venivano stampati tantissimi zeri con qualche uno sporadico , mentre alla pressione di un pulsante le stampe cambiavano completamente assumendo una sequenza "più o meno" regolare , dove per più o meno intendo il fatto che mentre senza pressione del pulsante si presentavano praticamente solo zeri quando lo premevo iniziavano ad arrivare anche sequenze di uno e zeri e appena rilasciato il pulsante di nuovo una sfilza di zeri.(Allego screen) Dunque pensando che potessero essere errori di sincronizzazione tra velocità del dispositivo e velocità di lettura della scheda ho provato ad impostare il timer 1 in modalità interruzione facendo in modo che venisse generata un'interruzione ogni 0,0005s impostando quindi i registri prescaler=1 e compare= 7999 (Poichè freq_desiderata=2Khz=16Mhz/compare).

Dunque effettuando questa operazione ho riscontrato qualche miglioramento nella regolarità delle stringhe (Ho aggiunto anche delle stampe per formattare meglio l'output con le println facendo stampare 150 bit ogni riga) , ovvero alla pressione del pulsante iniziano ad arrivare stringhe di lunghezza uguale e che differiscono di pochi bit tra loro. Continuando a modificare la frequenza del timer per effettuare prove non sono però riuscito a migliorare la situazione , e sto iniziando a pensare che queste letture non possano essere fatte con un certo livello di precisione ma preferirei che qualcuno mi potesse dire la sua e magari aiutarmi a risolvere il problema.

Ps: Inoltre ho fatto anche dei test cambiando le print per poi utilizzare il plotter al posto del monitor e dal plotter si notano benissimo le differenze tra pressione e non pressione del pulsante.

//storage variables
int cont = 0;
int buf[200];


void setup() {

  //set pins as outputs
  Serial.begin(9600);
  pinMode(3, INPUT);


  cli();//stop interrupts


  //set timer1 interrupt at 2kHz
  TCCR1A = 0;// set entire TCCR1A register to 0
  TCCR1B = 0;// same for TCCR1B
  TCNT1  = 0;//initialize counter value to 0
  // set compare match register for 2khz increments
  OCR1A = 7999;// = (16*10^6) / (1*1024) - 1 (must be <65536)
  // turn on CTC mode
  TCCR1B |= (1 << WGM12);
  // Set CS12 and CS10 bits for 1 prescaler
  TCCR1B |=  (1 << CS10);
  // enable timer compare interrupt
  TIMSK1 |= (1 << OCIE1A);


  sei();//allow interrupts

}//end setup


ISR(TIMER1_COMPA_vect) { //timer1 interrupt 1Hz toggles pin 13 (LED)
  //generates pulse wave of frequency 2khz
  if (cont < 200) {


    Serial.print(digitalRead(3));
    //buf[cont]=digitalRead(3);
    cont++;
  }
  else {

    cont = 0;

    Serial.println();


  }

}


void loop() {
  //do other things here
}

Questo è il codice del timer con interrupt e in allegato sono presenti gli screen relativi alla pressione e non del pulsante con il plotter seriale modificando le print.

Output testuale su seriale.
Help.

Up