@torn24
ascolto te o ascolto un altro, perché per me siete uguali
Questo perché non sei esperto di programmazione e non cogli i problemi che possono sorgere. Ed è il motivo per cui, dare consigli da inesperto, si rischia di fare più male che bene.
L'ignorare un argomento porta sempre a semplificare il funzionamento proprio perché si ignorano dettagli che possono complicare il discorso.
Il problema principale dell'approccio seguito nel video e nel link è che va bene solo se la frequenza degli impulsi è bassa. Perché? Innanzitutto perché legge gli ingressi con l'istruzione digitalRead(), che è estremamente comoda, ma anche molto lenta.
Tieni conto che un encoder da 1000 impulsi/giro, che ti fornisce 4000 conteggi/giro valutato 4x, arriva subito a 4000 conteggi/secondo a 60 rpm
Se l'albero gira lento, non avrai problemi, ma come si inizia a salire di frequenza, sì!
Dal link sotto, dove, presumo, abbia preso il codice anche Aliverti:
Con il salire delle frequenze, l'approccio illustrato mostra i suoi limiti, ben prima di quanto sarebbe in grado di acquisire Arduino con del codice ottimizzato. Ancora peggio se aggiungi qualche altra periferica. Alcuni driver potrebbero disabilitare temporaneamente gli interrupt perché devono eseguire delle operazioni con tempistiche molto precise. E questo ti potrebbe far perdere conteggi.
Infine: a parte il fatto che anche nel video l'encoder è mosso piano con la mano, ma poi il video non mostra se il circuito sta contando in modo corretto o meno. Dovresti fare dei movimenti, anche veloci, sia in avanti che indietro per poi tornare alla posizione di partenza, in modo molto preciso e verificare che il conteggio finale sia pari a quello iniziale.
Tra l'altro, quello che ti ho detto deriva da una esperienza personale, dove avevo un encoder lineare con risoluzione 0,5 micron che raggiungeva molto facilmente frequenze elevate e, nonostante il circuito sembrasse funzionare, di tanto in tanto perdeva conteggi proprio perché superavo la frequenza massima gestibile da Arduino.
https://playground.arduino.cc/Main/RotaryEncoders/
https://www.pjrc.com/teensy/td_libs_Encoder.html