Paso 4: El código
Los trabajos de esquema es muy simple. Un acelerómetro proporciona información de movimiento en x, y, eje z. Basado en la orientación, se actualizan los valores RGB de los LEDs.
El trabajo se divide en las siguientes fases.
- Hacer una lectura del sensor.
Simplemente utilizar la api. - Por trigonometría, resolver los valores de "roll y pitch".
Puedes encontrar mucha más información en este documento por Mark Pedley. - Obtener el color correspondiente, relacionados con los valores de rotación.
Para eso nos dirigimos a 0-360 RGB valor con un HSL - función de conversión de RGB.
El valor del campo se utiliza en diferentes escalas para regular la intensidad de luz blanca y saturación de color. Los hemisferios opuestos de la esfera del selector de color están totalmente blancos. - Actualiza el buffer de luces que almacena la información de los colores LED individuales.
Según esta información, el controlador de búfer creará una animación o responderá con colores complementarios. - Finalmente muestran los colores y refrescar los LEDs.
Inicialmente, la idea era crear una esfera de color donde usted puede elegir cualquier color. Colocar la rueda de color en el meridiano y hacia los polos los tonos oscuros y claros.
Pero rápidamente se descartó la idea.
Los LEDs tonalidades distintas, apagado y encenderán rápidamente cada rgb LED, cuando da valores bajos para representar colores oscuros, los LEDs dan un rendimiento muy pobre y se puede ver cómo empiezan a parpadear. Esto hace que el hemisferio oscuro de la esfera de color no puede funcionar correctamente.
Luego vengo con la idea de asignar colores complementarios el tono seleccionado.
Por lo tanto, un hemisferio está escogiendo un valor de color monocromático de una rueda de 50% de iluminación 90 ~ 100% saturación. Mientras tanto el otro lado, recoge un degradado de color desde la misma posición de color pero agrega, en el otro lado de la pendiente, su color complementario.
La lectura de datos desde el sensor es cruda. Puede aplicar un filtro para suavizar el ruido y las vibraciones de la luz sí mismo. Por el momento, me parece interesante porque se ve más analógico, reacciona a cualquier toque y toma un segundo para estabilizar completamente.
Todavía estoy trabajando en el código y añadiendo nuevas funciones y optimización de las animaciones.
Usted puede chequear las últimas versiones del código en mi cuenta de github.