Paso 4: Cómo funciona
Para este proyecto contamos con tres "manchas de color" que se extiende hacia adelante y hacia atrás a lo largo de la tira con diferentes velocidades. Cuando manchas a través de unos a otros, superposición de rojo, verde y azul da como resultado varios colores. Mantenemos la posición y la velocidad de cada punto en variables y tenemos que calcular un color para cada LED en cada renegociación. Mientras que nosotros podemos hacer muchas veces por segundo, la animación se verá lisa.
Cada componente de color de un píxel es proporcional a exp(-d*d), donde d es la distancia entre el pixel y el centro de punto de color correspondiente. En otras palabras, pixel colores representan una distribución normal (gaussiana), es exactamente lo mismo que utilizar el filtro "Desenfoque gaussiano" en editor gráfico.
La función exponente en Arduino biblioteca parece ser muy lento, así que hice una aproximación utilizando sólo dos multiplicaciones y una división: 1.0/(1.0-(0.634-1.344*x)*x). Tenga en cuenta que esta aproximación es conveniente solamente para x < 0.
Calcular el color de cada píxel en bucle y enviarlo a un búfer de memoria llamando al strip.setPixelColor(). Cuando coloca sobre cada píxel que llamamos strip.show() y biblioteca de NeoPixel síncrono envía todos los datos al pin especificado, todos los píxeles, uno por uno, 24 bits de datos de color de cada píxel. NeoPixel primero Lee los primeros 24 bits de datos, almacena localmente en un registro y pasa todos los datos a través de píxeles próximos. Segundo "pixel" toma sus datos y envía el resto a la siguiente, y así sucesivamente y así sucesivamente hasta que cada píxel obtiene sus datos. Con seguridad puede enviar menos datos que el número de LEDs que hay en una tira, sólo primera NUMPIXELS trabajará luego.
El código está bien documentado (¡ espero!) y por favor, haga preguntas en comentarios aquí!