Hay una muy buena biblioteca para trabajar con codificadores en la plataforma Arduino así como en Teensys. Está desarrollado por PJRC, el desarrollador de teensy, y tiene una muy buena explicación en su página que se puede encontrar aquí: enlace
Para responder a su pregunta un poco más exhaustivamente, los codificadores funcionan, al codificar la rotación en el llamado código gris.
El código gris es una forma de señalización eléctrica donde tienes dos trenes de pulsos, que se ven así:
Este método de señalización permite que un microcontrolador como un Arduino detecte tanto la dirección de rotación como la cantidad de rotación.
Una forma de leer el código gris es disparar cuando uno de los pines, p. ej., pin1, sube, y luego lee el estado del segundo pin. Debido a la naturaleza del código gris, si está girando en una dirección, el pin 2 siempre estará bajo cuando el pin 1 esté en una dirección de rotación, mientras que siempre estará alto para la dirección de rotación opuesta.
Una buena manera de implementar esto es usar interrupciones para detectar cuándo un pin cambia de estado porque los codificadores generarán señales muy rápido con velocidades de rotación moderadas porque un codificador típico usado con un Arduino tiene 4 pasos eléctricos por sangría física. Sin embargo, todavía tendrá varios problemas que superar. En primer lugar, al ser un interruptor mecánico, tendrá que lidiar con el rebote del interruptor, pero, entre otras cosas, lidiar con la velocidad de ejecución del código, para garantizar que no se pierda ningún impulso en movimientos más rápidos.
En general, mi recomendación sería utilizar la biblioteca provista por PJRC, ya que es una biblioteca de muy buen rendimiento y es compatible con múltiples modos de operación, con diferentes niveles de rendimiento.
Los consejos generales para obtener el máximo rendimiento de los encoders de lectura es utilizar las interrupciones tanto como sea posible, para garantizar que se capten los impulsos.