Étape 6: Le code
Ainsi, j’ai beaucoup de code mort que j’avais prévu de faire beaucoup de différentes animations, mais comme le Noël parti j’ai approché raccourci tout et simplement allumé LEDs en séquence.
Cela fonctionné très efficacement que j’avais relié les LEDs dans aucun ordre particulier, donc il semble aléatoire, et il a aidé à cacher les voyants qui n’avaient pas.
Ainsi, le code...
Je l’ai mis vers le haut sur GitHub :
https://github.com/NathanWilliams/GingerbreadHouse2011
Vous pouvez le parcourir, il fourche ou simplement télécharger un zip de là.
Pour comprendre le code, le meilleur endroit pour commencer est hal.cpp (Hardware Abstraction Layer).
Pour faire une matrice charlieplexed regarder comme si tous sont allumés en même temps, nous devons défile assez vite pour tromper le œil.
Pour ce faire, j’ai utilisé un minuteur d’AVR pour déclencher une interruption lorsqu’un montant fixé de temps a passé.
Lorsque le timer interrupt incendies, la LED suivante s’affiche.
Si il est activé ou non dépend de « l’écran » qui est un tableau de 42 booléens, true si une LED doit être sur, false pour désactivé.
Afficheur LED affecte la bonne combinaison de broches de sortie et tout le reste « déconnectée » (haute impédance).
Tout le reste se passe dans le fichier principal (Oui, tout le reste est code mort...).
Même la plupart du code dans ce fichier est code mort, mais je l’ai laissé comme point de départ pour l’année prochaine.
Tout ce que vraiment matters est le programme d’installation et de FrameCallback.
FrameCallback est une fonction qui est passée comme une fonction de rappel qui est appelée à partir de l’interruption de rafraîchissement basée sur le nombre d’images qui ont été tirés.
Comme je peins à 60 FPS, j’ai mis le rappel pour chaque 15 images, ou ~ 250ms.