Estoy tratando de generar un valor RGB de color aleatorio -> encender el LED RGB -> esperar 5 minutos -> generar el siguiente color aleatorio -> desvanecerse del color antiguo al color nuevo.
return (unsigned char)(rand()/(RAND_MAX/255 + 1));
para los 3 canales.Ahora que también quiero mostrar los colores intermedios (usando PWM), esto es lo que estoy pensando hacer:
Mi pregunta es, ¿es esta la mejor manera de hacer la transición entre colores, para producir los colores más agradables estéticamente (sin parpadeos, etc.)? ¿Alguna idea sobre el número de pasos de transición y el tiempo de espera?
Probablemente será más agradable desde el punto de vista estético hacer una transición entre colores usando el espacio de color HSV.
Utiliza lo que se llama interpolación lineal (o alguna otra forma).
Si A es su valor inicial y B es su valor final, entonces
f(t) = (1 - t)*A + tB
Es una función que tiene el valor inicial, t = 0, de A y el valor final, t = 1, de B.
También puede usar otras funciones, si se desvanece diferente, en general,
f(t) = (1 - g(t))*A + g(t)*B
funcionará para cualquier g(t) siempre que g(0) = 0 y g(1) = 1.
entonces, g(t) = t^n funcionará y n controlará la "velocidad" o "velocidad" de desvanecimiento.
Entonces, en su caso, para la interpolación lineal,
t = counter*Step
Current_Red = (1 - t)*Starting_Red + t*Final_Red
Tenga en cuenta que cuando el contador = 0, entonces Current_red = Starting_Red y cuando el contador = valor final, CurrentRed = Final_Red.
Obviamente, cuando t = 1, entonces 1 = contador*Paso, por lo que se puede calcular el valor final del contador, que dependerá del tamaño del paso.
Es posible que desee utilizar diferentes valores de interpolación ya que percibimos los componentes de los colores de manera diferente. Si los desvaneces de todos modos, es posible que no se vea tan natural.
Probablemente necesite actualizar al menos 30 veces por segundo más o menos. No sé si el ojo percibirá pequeños cambios como estos a lo largo de 5 mins. Probablemente podría cambiar el color una vez por segundo y nadie notará la diferencia, a menos que los colores estén muy separados.
En cualquier caso, tienes la posibilidad de ajustar los parámetros con bastante facilidad. Prueba una vez por segundo y si no te gusta, aumenta la velocidad. No es un gran trato.
Las transiciones de luz dependen del estado de ánimo de la pantalla y la gama de efectos que puede producir.
Una transición estimulante puede acelerarse y pasar por una saturación total rápida o cambios suaves en la rueda de colores como una rueda de juegos de carnaval y detenerse en el nuevo color aleatorio en unos pocos segundos.
Con una mínima distracción, una transición lenta podría interpolar los puntos de inicio y final de RGB e incrementar el cambio en 5 segundos para evitar incidentes de tráfico.
Un efecto interesante podría alternar entre el color siguiente y el actual con un ciclo de trabajo que cambia lentamente mientras se hace una transición más rápida en medio del barrido con un tiempo de transición total de 1 a 5 segundos.
En cualquier caso, hay que evitar a toda costa el parpadeo que es más irritante que estimulante (salvo que seas adolescente) y utilizar un PWM > 500 Hz.
Comentarios secundarios: agregado
La pantalla más estimulante que recuerdo no fue usar LED sino usar un televisor grande modificado para mostrar música cuadrafónica en los 4 colores RGBY y modifiqué la pantalla en un vector de alcance con amplitud de cada color proporcional al registro de cada amplitud y cada vector de color XY comenzando en el centro de la pantalla y yendo radialmente en compensaciones de 90 grados. El resultado fue ver lo que escuchaste con muchos bucles y colores. Pero eso fue en 1970, antes de que los LED fueran populares.
Tengo una cadena LED de luz XMAS con 20 efectos de transición controlados por un micro de un solo chip y un interruptor momentáneo para incrementar su elección de efectos, que son de gran alcance.
También tengo un archivo gif, lo hice para simular transiciones suaves de la iluminación de la rueda de colores de la iluminación exterior de un templo, pero no se puede insertar aquí.
Ankit
mariano alvira
Chris_F