leggere un segnale seriale a 300 baud

Buonasera Signori.
ultimamente mi sono dedicato alla decodifica ed alla analisi di un segnale digitale di un radiomodem a 300baud utilizzante la modulazione fsk.
il mio problema è che non sono sicuro di quello che leggo tramite un picccolo listato ed arduino uno.
dal modem fuoriescono il clock che è a 300hz e la linea data che in sede di decodifica il controller"arduino" la dovrebbe mettere in XNOR con il clock per avere il segnale in codifica manchester.
ho provato a fare il serial print dell’XNOR dei due segnali entranti in due porte di arduino, precisamente la 2 per la linea data e la 4 per la linea clock.
Solo che noto che al variare del baud rate del serial print, sul monitor seriale vien fuori una stringa binaria più o meno lunga in funzione di quest’ultima velocità seriale.
Domanda…
A quale velocità o meglio baudrate devo impostare il serial print per leggere effettivamente quello che vien fuori tra la linea di clock e data???

allego il mio piccolo listato.
Gradisco suggerimenti e dritte.

/*
Legge sul pin Data e mette il bit in XOR con quello letto sul clock
All'inizio attende di trovare un segnale basso della durata minima di 1600 millis (1600000 micros)
Poi comincia a leggere fino a quando non si verifica la condizione di timeout, cioè
fino a che non legge un segnale basso la cui durata è maggiore o uguale del timeout
*/

#define DataPin 2
#define ClockPin 4

const double TimeIn=1600000;
const double TimeOut=100000;

// #define OutData 7

void setup() {

  Serial.begin(300);
  pinMode(DataPin, INPUT);
  pinMode(ClockPin, INPUT);

//pinMode(OutData, OUTPUT);

 //tone(ClockPin, 300);
}

void loop() {

  boolean StopRead;
  double RealTime;
  byte buffer [2];
  int i=0;

  // ** Finchè non trova un basso lungo 1600 ms elimina i dati in input

  StopRead=false;
  while(!StopRead)
  {
     RealTime=micros();
     while (digitalRead(DataPin)==LOW){;}
     // quando esco misura la durata del basso. Se è superiore a TimeIn la sequenza di dati è terminata
     StopRead=((micros()-RealTime) >= TimeIn);
  }
  // *** qui abbiamo la certezza dell'inizio di una sequenza valida ***

  RealTime=micros();
  StopRead=false;
  while(!StopRead)
  {
    //Serial.print(BitRead^digitalRead(ClockPin), BIN);
   
     RealTime=micros();
     while (digitalRead(DataPin)==LOW){;}
     // quando esco misura la durata del basso. Se è superiore a Timeout la sequenza di dati è terminata
     StopRead=((micros()-RealTime) >= TimeOut);
  

  for (i=0; i<2; i++) {

  buffer[i]=(digitalRead(DataPin)^digitalRead(ClockPin));
  Serial.print(buffer[i],BIN);

   }

 
 }
  
  
  
 
  
  }

Per fare la decodifica manchester devi collegare il clock ad un interrupt, p.e. il pin 2, e fare l’XOR con la linea data, all’interno della ISR, solo quando il clock cambia di stato verso lo zero, ovvero sul fronte di discesa, però alcuni vecchi sistemi manchester lo facevano sul fronte di salita.
Se non ottieni i dati corretti in uscita col fronte di discesa prova con quello di salita.

La seriale che usi per visualizzare i dati non ha NIENTE a che fare col segnale che ricevi e vuoi leggere. In questo caso é meglio piú veloce possibile per non tenere occupato il Arduino. (115200)
Ciao Uwe

astrobeed:
Per fare la decodifica manchester devi collegare il clock ad un interrupt, p.e. il pin 2, e fare l'XOR con la linea data, all'interno della ISR, solo quando il clock cambia di stato verso lo zero, ovvero sul fronte di discesa, però alcuni vecchi sistemi manchester lo facevano sul fronte di salita.
Se non ottieni i dati corretti in uscita col fronte di discesa prova con quello di salita.

Caro Astrobeed.

Siccome non sono affatto una cima in programmazione, mi aiuteresti ad impostare l'interrupt sul pin di clock??
per ora sul fronte di discesa poi in caso lo cambio?

Grazie