Encoder rotativo a fune alta risoluzione

Salve a tutti, ho dei seri problemi a ricavare una misurazione valida con un encoder incrementale a fune della sick ad alta risoluzione 765 impulsi per giro.
Ho uitilizzato delle librerie con esempi, oppure provato a scrivere da me un semplice sketch per incrementare il valore secondo la logica degli encoder incrementali, ma non riesco mai ad avere lo stesso risultato quando riporto la fune a zero. Ho pensato che potesse essere un problema di velocità dati in lettura ma anche alzando il baud rate non ne vengo a capo alle volte tirando addirittura ottengo dei dati contrari al verso. Sicuramente deve essere l'alta risoluzione dell'encoder il problema. Ora mi chiedo, è sufficiente un arduino uno per la lettura di 765 impulsi per giro?
Ho letto in altri post che potrebbe aiutare l'utilizzo di un decoder a quadratura hardware che è presente dentro l'arduino due, cosa ne pensate?

Grazie a tutti allego codice casalingo preso dal web

#define outputA 6
 #define outputB 7
 #define outputZ 8

 int counter = 0; 
 int aState,bState,zState;
 int aLastState;  

 void setup() { 
   pinMode (outputA,INPUT);
   pinMode (outputB,INPUT);
   pinMode (outputZ,INPUT);
   
   Serial.begin (9600);
   // Reads the initial state of the outputA
   aLastState = digitalRead(outputA);   
 } 

 void loop() { 
   aState = digitalRead(outputA); // Reads the "current" state of the outputA
   bState = digitalRead(outputB); // Reads the "current" state of the outputA
   zState = digitalRead(outputZ);
   // If the previous and the current state of the outputA are different, that means a Pulse has occured
   if (aState != aLastState){     
     // If the outputB state is different to the outputA state, that means the encoder is rotating clockwise
     if (digitalRead(outputB) != aState) { 
       counter++;
     
     } else {
       counter --;
     }

     //if(zState==HIGH)
     //counter = 0;
     Serial.print("Position: ");
     Serial.println(counter);
     
    
   } 
   aLastState = aState; // Updates the previous state of the outputA with the current state

ok credo di aver risolto con l'utilizzo degli interrupt, vi linko qui una spiegazione che mi ha fatto capire la logica. LINK

ho comunque sempre il problema che se tiro molto rapidamente la fune il valore prende una deriva di millimetri, importante... Avete delle idee?

A parte che pinMode (outputA, INPUT) è un controsenso...
A e B devi leggerli contemporaneamente con PIN! Tra due digitalRead passano alcuni microsecondi in cui lo stato può cambiare!

Grazie per la risposta infatti il problema principale sembrava essere quello, ora da un lato ho risolto con l’utilizzo degli interrupt, dall’altra quando il movimento è troppo repentino mi perdo informazioni. Sicuramente stampare sulla porta seriale ogni valore ha poco senso, potrei dare una cadenza più rada di aggiornamento seriale, dovrebbe migliorare un po’ immagino.

Se vuoi puoi scriverlo in assembler utilizzando la tecnica a polling su interrupt periodico di 12uSec, questa tecnica consente di ottenere una frequenza massima di CPR di 83khz che potrebbe essere sufficiente ai tuoi scopi