Ne vous aimez juste ces anneaux Adafruit Neopixel ? J’ai les 12, 24 et les anneaux de 60 pixels massive, et jusqu'à présent toutes mes croquis ont été configurables pour fonctionner avec n’importe lequel d'entre eux, avec la taille définie statiquement au moment de la compilation avec une ligne comme
#define PIXELS 24
Donc si je change l’anneau pour une taille différente je dois recompiler le croquis et le re-télécharger. Mais ne serait-il pas agréable si le croquis pourrait déterminer automatiquement la taille de l’anneau pour lui-même, rendant plug ' jouer ! Les photos montrent chacun des 60, pixel 24 et 12 anneaux à son tour, conduit par la même esquisse non modifiée.
Il y a plusieurs façons d’y parvenir, tout en s’appuyant sur le fait qu’une fois que tous les pixels dans un anneau ont reçu leurs données RVB, les données excédentaires se situe hors de la connexion DOUT à la fin de la chaîne qui rendent possible de chaîner Neopixels supplémentaire si vous le souhaitez. En principe puis, vous pouviez vous connecter DOUT sur une broche d’entrée sur l’Arduino et compter combien de pixels vous avez bourré les données avant la segmentation par l’autre extrémité.
Comme toujours, il est plus facile dit que fait, surtout si vous vous êtes fixés la restriction que vous ne voulez pas modifier la bibliothèque Adafruit Neopixel standard.
Ma première idée devait relier DOUT à une tige d’interruption sur l’Arduino. Les fonctions de la bibliothèque bourrer données dans le Neopixels avec les interruptions désactivées, donc l’interruption (si elle est déclenchée) ne pourrait être réparée une fois que la farce ait fini. Mais en principe, vous pourriez instancier successivement plus grands anneaux jusqu'à ce que l’interruption n’est pas arrivé à tous les. Malheureusement, il doit normalement être instancié dans un cadre global pour le rendre accessible à la fois setup() et loop(), alors qu’il aurait à être instanciée dans setup() afin d’implémenter la logique nécessaire.
Une meilleure méthode consiste à utiliser des compteurs/timers 1 en mode compteur de compter les impulsions qui sort DOUT. Cela nécessite que vous vous connectez DOUT à broche 5, la broche d’horloge externe de compteur/Timer 1. Chaque pixel nécessite 24 bits de données (représentées par une brève impulsion de « 0 » ou un long pour « 1 »), donc tout ce que vous avez à faire est instancier la plus grande taille de l’anneau, puis divisez le nombre d’impulsions comptées par 24. Cela vous indique combien plus petit est l’anneau utilisé (le cas échéant), par rapport à l’anneau plus grand. Par conséquent, vous pouvez calculer la grosseur réelle et enregistrez-le dans une variable globale pour une utilisation dans la mesure nécessaire. Il n’importe pas que la bibliothèque Adafruit puis enverra données inexistantes pixels.