Paso 8: Firmware - parte 1: Resumen Conceptual
La biblioteca siempre define las siguientes funciones en pubnub/pubnub.h.
El código fuente completo está disponible en este repositorio de GitHub.
Antes que bucear en el código, vamos a tomar un momento para repasar todo lo que está sucediendo. Una vez que se inicializa el AVR, el bucle principal es responsable sólo de secuencias de persecución de LED. Todo el control real se maneja en las rutinas de servicio de interrupción. Para esto, se utiliza el temporizador/contador de 8 bits 0.
Conceptualmente hablando, el temporizador se utiliza para indicar que es bien tiempo para encender LEDs, o tiempo para apagar el LED. Qué LED debe ser encendido o apagado está determinada por un par de matrices multidimensionales:
A continuación, hablará sobre cómo los colores realmente se crean mediante el temporizador 0.
La matriz de leds es 2 x 8 x 3 bytes - un byte por cada fila de color (R, G y B) en cada columna, en cada arreglo de discos. Cada bit de este byte representa un LED en esa fila. La gama de colores es 2 x 8 x 8 bytes - un byte para representar el color deseado de cada LED.
Para tener tiempo suficiente para ambas matrices de control, se utiliza una resolución de 4. Esto puede parecer pequeño en comparación con la resolución de 255 en colores del equipo, pero tenga en cuenta que 4 x 4 x 4 = 64 colores únicos. Es posible aumentar esta resolución algunos, pero 64 colores únicos parece ser suficiente para mis propósitos. En la actualidad, muchos de estos colores son muy similares, por lo que esto reduce hasta 44 en el archivo de encabezado modules/macros/color_8bit.h. Este archivo también contiene una matriz de los niveles R, G y B individuales necesarios para crear cada color disponible.
A continuación, hablará sobre cómo los colores realmente se crean mediante el temporizador 0.