Etape 52 : Logiciel : comment le RVB gousses sont mises à jour
void RGB_Pod (UINT8 pod, UINT16 rouge, vert UINT16, UINT16 bleu)
Cette fonction aura le paramètre « pod », qui devrait être une valeur de 1 à 20 et définissez les valeurs rouges, verts et bleus correspondantes sur les canaux de cette gousse. Il n’y a pas de décoloration dans cette fonction, il va simplement changer le pod à quelle que soit la couleur que vous souhaitez.
Changement pod la couleur de #5 rouge
RGB_Pod(5,4095,0,0) ;
void Pod_Set_Color (UINT8 pod, pod_color RVB)
Cette fonction est exactement le même que RGB_Pod(p,r,g,b), seulement il utilise un struct RGB pour définir la couleur de la gousse. C’est bien si vous voulez rapidement définir la gousse à l’un de la valeur par défaut de 10 couleurs.
Changement pod la couleur de #5 rouge
Pod_Set_Color(5,Color[Red]) ;
void Fade_To (UINT8 pod, le vieux RGB, RGB nouveau, UINT16 retard) ;
Cette fonction est de loin mon préféré car il permet à l’utilisateur à s’estomper dans et hors de couleurs. Ceci fournit une belle transition sans heurt entre la couleur vieux la couleur nouvelle et la vitesse de la transition est contrôlée en ajustant le « retard ». Dans mon code, j’ai un tableau de struct global appelé 'PODn [20] » qui sert à enregistrer la valeur actuelle de chaque gousse. Pour PODn [x], « x » sera toujours 1 inférieure à la valeur de la nacelle qui nous vous écrivons pour car les gousses sont adressés de pod #1 - #20 et le tableau est PODn [0 19]. Le format de cette fonction est comme suit :
Fade_To (POD #, PODn [POD #-1], couleur, délai) ;
Voici un exemple de décoloration du rouge au bleu : gousse :
Le pod est déjà rouge, donc PODn [4] est déjà égal à la couleur [rouge]
Fade_To(5,PODn[4],Color[Blue],10) ;
Taux de fondu et fondu périodes
Il suffit d’exécuter Fade_To() fois et le pod continuera à s’estomper même si vous interrompez le programme. Dans Timer3, il y a une fonction appelée Fade_State(void) qui va vérifier pour voir si l’un des gousses RVB est actuellement dans le processus de décoloration d’une couleur à l’autre. Si un pod s’estompe, la routine met automatiquement à jour la nacelle un peu plus de fondu par interruption jusqu'à ce que le pod a complètement sombré dans la couleur que l’utilisateur a spécifié. La vitesse de transition peut être calculée facilement :
Fondu de taux = quantité de fondu étapes nécessaires pour disparaître complètement à une autre couleur
Un Fade Step = 8ms par interruption
Se fanent la période = la quantité de temps qu’il faut pour le pod complètement fondu
Fondu de taux = (Fade période / un Fade Step)
Exemple #1
Permet de s’estompent pod RVB #8 à la couleur par défaut rose et la valeur qu’il ait une durée de fondu de 400 ms.
Fondu de taux = (400 MS / 8ms par interrupt) = 50
Se fanent pod #8 au rose au cours de 400ms
Fade_To (8, PODn [7], couleur [PINK], 50) ;
La durée de fondu ne sera pas fiable à 100 %, mais c’est très bien que nous ne devons pas qui précise du calendrier. Avec tous les autres interruptions et code en l’exécutant peut s’écarter de quelques microsecondes chaque fois, mais c’est très bien pour notre application. Si toutes les gousses sont à jour en même temps, le temps maximum passé en Fade_State(void) est 1.3ms. Nous ne voulons pas perdre une grande quantité de temps dans une routine d’interruption et c’est le poussant, mais tout fonctionne toujours très bien. J’ai eu à l’origine les gousses regroupées en grappes de cinq et chaque cluster a été seulement mis à jour chaque 4e cycle interrupt ayant entraîné le temps max vers le bas pour ~ 400μs, qui était mieux, mais ensuite j’ai été seulement mise à jour les étapes de dégradé de chaque gousse chaque interruption Timer3 4e cycle au lieu de chaque cycle d’interruption unique. Qu’il en soit, cela fonctionnera, mais en le faisant chaque cycle d’interruption il nous donne plus de précision pour les tarifs de fondu.