Paso 17: ColorduinoSlave Firmware
El sketch de Arduino para este proyecto, ColorduinoSlave.pde, hace uso de la biblioteca de interfaz Colorduino, que también he desarrollado. He incluido la versión actual en ColorduinoSlaveV1.zip, pero en caso de futuras actualizaciones, siempre puede descargar la última versión desde: Colorduino biblioteca para Arduino. La biblioteca se encarga de todo el trabajo sucio de hablar con el hardware de control de LED en el Colorduino, como la inicialización básica del hardware, refrescar la pantalla y proporcionar a primitivas básicas para actualizaciones de la pantalla de doble búfer. Esta manera, no tienes que desorden encima de su dibujo con todo este código extra. Para instalar la biblioteca de Colorduino, simplemente descargue el archivo zip y copiar Colorduino.cpp/Colorduino.h en tu/< carpeta de sketch de Arduino > bibliotecas/Colorduino. Si ya tiene el IDE de Arduino, necesita reiniciar para que puede encontrar la biblioteca recién instalada.
ColorduinoSlave.pde de carga en el IDE de Arduino y subir a la Colorduino. Simplemente espera a que los paquetes de datos desde el host. El búfer de recepción en biblioteca serie de Arduino tiene un tamaño de búfer de recepción de 128 bytes. Puesto que una de las funciones de este proyecto es la sincronización de música en tiempo real, es importante reducir la latencia de enviar Marcos desde el host hasta el Colorduino. Por lo tanto, me tomé la libertad de cuantificar los datos de hasta 12 bits por píxel. Así, hay de datos utiliza sólo 96 bytes (con sobrecarga de protocolo de paquete, 100 bytes), y un paquete de todo encaja en el búfer de recepción.
Protocolo de paquetes de ColorduinoSlave
El protocolo de paquetes de ColorduinoSlave es simple y diseñado para ser tan compacta como sea posible. El formato básico es:
< SYNC BYTE > = 0xAA
< código OP > (BYTE)
< DATALEN >
[CARGA DE DATOS]
< CHECKSUM >
DATALEN es el tamaño en bytes de la carga de datos opcional. Suma de comprobación es simplemente la suma de 8 bits de todos los bytes en el paquete SYNC BYTE. Cuando ColorduinoSlave recibe un paquete, inmediatamente devuelve un código de estado al host. Un código de estado de cero significa que no hay error. Un código de Estado distinto de cero significa que se ha producido un error, como un paquete dañado.
Se admiten los siguientes códigos:
#define OPC_PING 0 x 01 / usa para probar si hay ColorduinoSlave y responder a los comandos
#define OPC_PLAY_FRAME 0 x 02 / / imediately jugar un marco de 12 bits
#define OPC_QUEUE_FRAME 0 x 03 / / poner un marco de 12 bits en la cola del marco. El tamaño de la cola del marco se controla mediante PACKED_FRAME_QUEUE_LEN. Mi beta Colorduino vino con un ATmega168V, por lo que la RAM era tan insignificante que mi cola marco solo puede manejar 2 marcos. Si tienes un ATmega368, se puede ir más alto.
#define OPC_SET_MODE 0 x 04 / / establece el modo de funcionamiento actual.
#define OPC_FILL 0 x 05 / / rellenar con un color de 24 bits. La carga de datos es de 3 bytes, R, G, entonces B. Cada valor es de 0-255.
Los modos de funcionamiento seleccionables con OPC_SET_MODE son:
#define CMODE_PLASMA 1 / / en modo de pantalla de plasma automático
#define CMODE_PLAY_FRAME 2 / / aceptar paquetes OPC_PLAY_FRAME
#define CMODE_MUSIC_SYNC 3 / muestra entradas de música via SENSOR_PIN
#define CMODE_FILL 4 / / aceptar valores RGB de 24 bits
En CMODE_MUSIC_SYNC, el host envía marcos 12 bits por OPC_QUEUE_FRAME siempre que hasta el marco de la cola está llena. Una vez que se llena la cola de marco, ColorduinoSlave no enviará una respuesta al host hasta que elimina al menos un paquete. Cuando no CMODE_MUSIC_SYNC, OPC_QUEUE_FRAME no exhibe este comportamiento de bloqueo y siempre de manera inmediata, devuelve el estado al host.