Paso 12: NeoPixel Stick
Puesto que es una regla no escrita que proyectos Arduino deben tener LEDs desagradable (es broma!), he añadido un palo de NeoPixel al coche. NeoPixels son un tipo de indvidually direccionable RGB LED producido por AdaFruit, y el palo de NeoPixel tiene 8 LEDs direccionables en un PCB compacto. La memoria requiere una librería de Arduino de terceros (https://github.com/adafruit/Adafruit_NeoPixel) para trabajar, pero es bastante fácil de configurar (hardware y software). Soldado en algunos encabezados femeninas por lo que se podía conectar con cable de núcleo sólido 22AWG.
Las luces se controlan mediante el controlador de XBox 360. El botón "Y" cambia el palo de NeoPixel encendido. La DPad controla el brillo y la "secuencia". El brillo es controlado por arriba/abajo en la DPad, y la secuencia es DPad izquierda/derecha. La secuencia se refiere a los modos preprogramados configurados para el palo de NeoPixel.
La lista de secuencias en la versión actual del software es:
Secuencia 0: Todos los LEDs en blanco (brillo ajustable)
Secuencia 1: Todos los LEDs en rojo (brillo ajustable)
Secuencia 2: Todos los LEDs en verde (brillo ajustable)
Secuencia 3: Todos los LEDs en azul (brillo ajustable)
Secuencia 4: luces de emergencia - el extremo naranja flash LED
Secuencia 5: Modo policía - el final flash de LEDs rojo/azul (no utilizar esto en una carretera en la noche, jaja)
Secuencia 6: Pulsación/atenuación LED verdes
Secuencia 7: Modo Knight Rider (rojo)
Secuencia 8: Modo Knight Rider (azul)
Secuencia 9: Secuencia de espacio en blanco, actualmente puesto a blanco (brillo ajustable)
El programa C# envía las instrucciones de NeoPixel a Arduino, utilizando un campo de caracteres 3 en el mensaje de salida serie, como "L51" el primer personaje controla el encendido/apagado (L = luces, D = off(dark)). El segundo carácter es el brillo (si es aplicable para la secuencia), y el último carácter es el número de secuencia.
Para procesar esta información, el Arduino recibe la cadena serial guarda la cadena de luz en una matriz de 3 caracteres separados y luego comprueba cada carácter. El Estado de NeoPixel se actualiza en cada iteración del bucle principal.
Nota: Para secuencias animadas, como la luces de emergencia y la secuencia de la policía, la función millis() se utilizó para registrar el tiempo. Más ejemplos de NeoPixel usan la función delay(), pero esto no puede utilizarse para el coche, ya que bloqueará la ejecución de los otros códigos en el Arduino, hasta que se completa el retardo.
Nota 2: Puesto que el palo de NeoPixel sólo se actualiza en cada iteración del bucle principal, el tiempo mínimo entre los diferentes Estados de NeoPixel es el retardo en el bucle principal. Como ustedes saben en la sección serial, este retraso establece la frecuencia de actualización de mensaje serial entre el Arduino y el PC. Por lo tanto, actualizaciones de muy alta frecuencia en el stick de NeoPixel no son posibles - la frecuencia más alta para la NeoPixels está directamente ligada a la frecuencia de la serie del mensaje (aproximadamente 20Hz).