Étape 8: Firmware - partie 1: vue d’ensemble conceptuelle
La bibliothèque fournie définit les fonctions suivantes dans pubnub/pubnub.h.
Le code source complet est disponible dans ce dépôt GitHub.
Avant que je plonge dans le code, nous allons prendre un moment pour passer en revue tout ce qui se passe. Une fois l’AVR est initialisé, la boucle principale est responsable uniquement de séquences chase LED. Tout contrôle réel est géré dans les routines de service d’interruption. Pour ce faire, le temporisateur/compteur de 8 bit 0 est utilisé.
D’un point de vue conceptuel, la minuterie est utilisée pour indiquer que c’est soit le temps pour allumer les LEDs, ou fois pour éteindre les LEDs. Ce que LED doit être activée ou désactivée est déterminée par une paire de tableaux multidimensionnels :
Ensuite, allons parler comment les couleurs sont en fait créés par Timer 0.
Le tableau LED est 2 x 8 x 3 octets - un octet pour chaque ligne de couleur (R, G et B) de chaque colonne de chaque tableau. Chaque bit de cet octet représente une LED dans la même rangée. Le tableau de couleurs est 2 x 8 x 8 octets - un octet pour représenter la couleur désirée de chaque LED.
Afin d’avoir suffisamment de temps pour contrôler les deux matrices, une résolution de 4 est utilisée. Cela peut paraître tout petit par rapport à la résolution de 255 dans les couleurs de l’ordinateur, mais gardez à l’esprit que les 4 x 4 x 4 = 64 couleurs uniques. Il est possible d’augmenter cette résolution certains, mais 64 couleurs uniques semble être beaucoup pour mes fins. En réalité, beaucoup de ces couleurs étaient très similaires, donc j’ai ceci réduit à 44 dans le fichier d’en-tête modules/macros/color_8bit.h. Ce fichier contient également un tableau des niveaux de r, G, B individuels nécessaires à la création de toutes les couleurs disponibles.
Ensuite, allons parler comment les couleurs sont en fait créés par Timer 0.