Étape 12 : NeoPixel Stick
Puisque c’est une règle non écrite qu’Arduino projets odieux LEDs (je plaisante!), j’ai ajouté un bâton de NeoPixel à la voiture. NeoPixels sont un type de séparément adressable RGB LED produites par AdaFruit, et le bâton de NeoPixel a 8 LEDs adressables sur un PCB compact. Le bâton nécessite une bibliothèque d’Arduino de tierce partie (https://github.com/adafruit/Adafruit_NeoPixel) pour travailler, mais il est assez facile à configurer (matériel et logiciel). J’ai soudé sur certains en-têtes femelles donc je pourrais connecter avec fil solide 22AWG.
Les lumières sont contrôlés à l’aide de la manette XBox 360. Le bouton « Y » active/désactive le bâton de NeoPixel marche/arrêt. Le DPad contrôle la luminosité et la « séquence ». La luminosité est contrôlée par haut/bas sur le DPad, et la séquence est DPad gauche/droite. La séquence se réfère aux modes préprogrammés configurés pour le bâton de NeoPixel.
La liste de séquences dans la version actuelle du logiciel est :
Séquence 0: Toutes les LED blanches (luminosité réglable) la valeur
Séquence 1: Toutes les LED rouge (luminosité réglable) la valeur
Séquence 2: Tous les voyants verts (luminosité réglable) la valeur
Séquence 3: Toutes les LED bleu (luminosité réglable)
Séquence 4: feux de détresse - la fin LEDs clignotent orange
Séquence 5: Mode Police - la fin LED flash rouge/bleu (ne pas utiliser cela sur une route pendant la nuit, haha)
Séquence 6: Impulsions/décoloration LEDs vertes
Séquence 7: Mode Knight Rider (rouge)
Séquence 8: Mode Knight Rider (bleu)
Séquence 9: Blank séquence, actuellement fixé à blanc (luminosité réglable)
Le programme c# envoie les instructions de NeoPixel à l’Arduino, en utilisant un 3 champ de caractères dans le message de sortie série, tels que "L51", le premier caractère contrôle marche/arrêt (L = allume, D = off(dark)). Le deuxième caractère est la luminosité (le cas échéant pour la séquence), et le dernier caractère est le numéro de séquence.
Pour traiter ces informations, l’Arduino reçoit la chaîne série, enregistre la guirlande lumineuse dans un tableau distinct de 3 caractères et vérifie ensuite chaque caractère. L' État de NeoPixel est mis à jour à chaque itération de la boucle principale.
Remarque : Pour des séquences animées, telles que les feux de détresse et la séquence de la police, la fonction millis() a été utilisée pour suivre les temps. La plupart des exemples de NeoPixel utilisent la fonction delay(), mais cela ne peut servir pour la voiture, car il se bloque l’exécution de tout autre code dans l’Arduino, jusqu'à la fin de ce retard.
Remarque 2: Le bâton de NeoPixel est seulement mis à jour à chaque itération de la boucle principale, le temps minimum entre les différents États de NeoPixel étant donné que le délai fixé dans la boucle principale. Comme vous le savez dans la section serial, ce retard définit la fréquence de mise à jour de série message entre l’Arduino et le PC. Ainsi, les mises à jour de très haute fréquence pour le bâton de NeoPixel ne sont pas possibles - la fréquence la plus élevée pour les NeoPixels est directement liée à la fréquence de la série message (environ 20Hz).