Paso 3: Firmware
Se adjunta es el firmware. Se puede compilar con «make», como se describe en el último paso. Está escrito en un hardware de manera independiente: se implementan todas las funciones, que no son C estándar, en hardware.cpp, así que portabilidad a otro microcontrolador es fácil. Las funciones del codificador rotatorio son en main.c. En display.c es son las funciones de dibujo de texto, números y rectángulos. La pantalla OLED tiene una detección automática de velocidad, por lo que se pueden utilizar otros tipos de transmisión.Hay dos pines de entrada para el codificador codificar las cuatro fases de las señales de cuadratura (véase la Wikipedia imagen http://upload.wikimedia.org/wikipedia/en/thumb/6/68/Quadrature_Diagram.svg/500px-Quadrature_Diagram.svg.png). La dirección de giro se puede detectar, si se compara el último estado de fase con el nuevo estado, por ejemplo, si cambia de estado 2 al estado 3 fue dada vuelta derecha y si cambia de estado 3 al estado 2 se convirtió izquierdo.
Por lo que necesitará saber el último estado y el estado actual. Un estado está codificado en dos bits. El último estado y el estado siguiente combinado son 4 bits. Este es el índice en una tabla con 16 entradas, que da + 1, 0 o -1, como la dirección en la que el codificador rotatorio se convirtió.
La tabla tiene la ventaja de que fácilmente puede implementar comportamientos especiales, e.g. para el codificador de Alpes hay transiciones de fase en las posiciones de ralentí, que se ignoran, ya que esto dio lugar a rebotando entre dos valores a veces. Y este todos la resolución, que se traduce en uno contando paso por trama.
Rebote de los contactos no es problema, si el tiempo entre la comparación de dos fases es más rápido que la velocidad más rápida puede cambiar dos fases.