Étape 4: Comment ça marche
Pour ce projet, nous avons trois « taches de couleur » qui se déroule en arrière le long de la bande avec des vitesses différentes. En actionnant des taches à travers eux, superposition de rouge, vert et bleu se traduit par différentes couleurs. Nous gardons la position et la vitesse de chaque spot en variables et nous devons recalculer une couleur pour chaque LED sur chaque rafraîchissement. Alors que nous pouvons le faire plusieurs fois par seconde, l’animation se penchera lisse.
Chaque composant de couleur d’un pixel est proportionnelle à exp(-d*d), où d est la distance entre le pixel et le centre de la tache de couleur correspondante. En d’autres termes, les couleurs des pixels représentent une distribution normale (gaussienne) – c’est exactement le même que l’utilisation de filtre « Flou gaussien » dans l’éditeur graphique.
La fonction exposant incluse dans la bibliothèque de l’Arduino semblait être très lent, alors j’ai fait une approximation à l’aide de seulement deux multiplications et une division : 1.0/(1.0-(0.634-1.344*x)*x). Veuillez noter que cette approximation est appropriée seulement pour x 0 <.
Nous calculons couleur de chaque pixel dans la boucle et l’envoyer à un mémoire tampon en appelant strip.setPixelColor(). Lorsque nous en boucle sur chaque pixel nous appelons strip.show() et NeoPixel bibliothèque envoie de manière synchrone toutes les données à la broche spécifié – tous les pixels, un par un, 24 bits de données de couleur pour chaque pixel. NeoPixel premier lit les 24 premiers bits de données, stocke localement dans un registre et passe toutes les autres données via au pixel suivant. Deuxième « pixel » tire ses données et envoie le reste à la suivante, et ainsi de suite et ainsi de suite jusqu'à ce que chaque pixel obtient ses données. Vous pouvez envoyer en toute sécurité de moins de données que nombre de LEDs vous avez dans une bande – seulement première NUMPIXELS travaillera ensuite.
Le code est bien documenté (j’espère!) et s’il vous plaît Posez des questions dans les commentaires ici !