Paso 52: Software: cómo el RGB vainas se actualizan
void RGB_Pod (UINT8 pod, UINT16 rojo, UINT16 verde, UINT16 azul)
Esta función tendrá el parámetro 'vaina' que debe ser un valor entre 1-20 y establecer los correspondientes valores de rojos, verdes y azules para los respectivos canales de esa vaina. No hay se descolora en esta función, simplemente cambiará la consola a cualquier color que usted desea.
Cambio de la vaina color de #5 rojo
RGB_Pod(5,4095,0,0);
void Pod_Set_Color (UINT8 pod, RGB pod_color)
Esta función es exactamente igual que RGB_Pod(p,r,g,b), sólo se utiliza una estructura RGB para establecer el color de la vaina. Esto es bueno si quieres rápidamente establecer la vaina a uno el valor por defecto 10 colores.
Cambio de la vaina color de #5 rojo
Pod_Set_Color(5,color[red]);
void Fade_To (UINT8 vaina, viejo de RGB, RGB nuevo, UINT16 retraso);
Esta función es por mucho mi favorito ya que permite al usuario que se descolora fuera de colores. Esto proporciona una agradable transición del color antiguo al color nuevo y la velocidad de la transición se controla mediante el ajuste de 'retraso'. En mi código, tengo un array de estructura global llamado 'PODn [20]' que se utiliza para guardar el valor actual de cada vaina. Para PODn [x], 'x' siempre será 1 menos que el valor de la vaina que nos dirigimos a porque las vainas se tratan de pod #1 - #20 y la matriz es PODn [0-19]. El formato de esta función es como sigue:
Fade_To (POD #, PODn [POD #-1], COLOR, retraso);
Aquí está un ejemplo de desvanecimiento de una vaina de rojo a azul:
La vaina ya es rojo modo PODn [4] ya es igual a COLOR [rojo]
Fade_To(5,PODn[4],color[Blue],10);
Se desvanecen las tasas y períodos de transición
Sólo necesita ejecutar Fade_To() una vez y la vaina seguirá a desaparecer incluso si detener el programa. En Timer3, hay una función llamada Fade_State(void) que comprobará para ver si cualquiera de las vainas RGB están actualmente en proceso de desvanecimiento de un color a otro. Si una cápsula se desvanece, la rutina actualizará automáticamente la vaina un paso más se desvanecen por interrupción hasta que la vaina se ha desvanecido completamente en el color que el usuario ha especificado. Fácilmente se puede calcular la tasa de fundido:
Se descolora tasa = la cantidad de medidas se descolora para desaparecer completamente a otro color
Uno se descolora paso = 8ms por interrupción
Fade período = la cantidad de tiempo que tarda el pod a desaparecer totalmente
Se descolora tasa = (Fade período / uno se descolora paso)
Ejemplo #1
Permite desvanecer pod RGB #8 para el color por defecto del color de rosa y establecer que tienen un período de transición de 400ms.
Se descolora tasa = (400ms / 8ms por interrupción) = 50
Se descolora pod #8 a rosa en el transcurso de 400ms
Fade_To (8, PODn [7] COLOR [Rosa], 50);
El período de transición no será fiable al 100% pero eso es bien, no necesitamos precisa de tiempo. Con todas las otras interrupciones y código al ejecutarlo puede desviarse por unos microsegundos cada vez, pero eso está bien para nuestra aplicación. Si todas las vainas se actualizan al mismo tiempo, el tiempo máximo empleado en Fade_State(void) es 1.3ms. No queremos perder una gran cantidad de tiempo en cualquier rutina de interrupción y esto está presionando, pero todavía funciona todo bien. Originalmente tenía las cápsulas agrupadas en grupos de cinco y cada racimo sólo se actualizó cada 4to ciclo de interrupción que el tiempo máximo para ~ 400μs, que fue mejor, pero entonces sólo estaba actualizando los pasos de transición de cada pod cada 4 interrupción del Timer3 ciclo en lugar de cada ciclo de interrupción solo. De cualquier manera va a funcionar pero haciendo cada ciclo de interrupción nos da mayor precisión de las tasas de transición.