Don't love u net die Adafruit Neopixel ringen? Ik heb de 12, 24 en de massale 60 pixel-ringen, en tot nu toe al mijn schetsen configureerbaar om uit te voeren met een van hen, met de statisch ingestelde zijn op grootte compilatietijd met een lijn, zoals
#define PIXELS 24
Zo als ik verander de ring voor een ander formaat moet ik opnieuw compileren van de schets en het opnieuw te uploaden. Maar zou het niet mooi zijn als de schets automatisch de grootte van de ring voor zichzelf bepalen kan, waardoor het plug'n'play! De foto's tonen elk van de 60, 24- en 12 pixel ringen op zijn beurt, wordt gedreven door de dezelfde ongewijzigde schets.
Er zijn verschillende mogelijkheden om dat te doen, allemaal afhankelijk van het feit dat zodra alle pixels in een ring hebt ontvangen hun RGB-gegevens, alle overtollige gegevens uit de DOUT verbinding aan het eind van de keten mogelijk te maken het serieschakeling verdere Neopixels als je valt. In principe dan kon je gewoon aansluiten DOUT op een invoer pin op de Arduino en tellen hoeveel pixels je hebt gevuld voordat de gegevens begint druppelen uit het andere uiteinde.
Zoals altijd, het is gemakkelijker gezegd dan gedaan, vooral als u zelf de beperking die u echt niet wilt wijzigen van de standaard Adafruit Neopixel bibliotheek instellen.
Mijn eerste idee was DOUT verbinden met een interrupt pin op de Arduino. De bibliotheekfuncties spullen gegevens in de Neopixels met interrupts uitgeschakeld, zodat de interrupt (indien geactiveerd) zouden alleen worden verwerkt zodra vulling had gebeëindigd. Maar in principe kan u achtereenvolgens grotere ringen instantiëren totdat de interrupt helemaal niet gebeuren. Helaas moet het normaal worden geïnstantieerd in de mondiale context van zowel de Setup en de loop, toegankelijk te maken, terwijl het exemplaren in Setup worden gemaakt moeten zou om de uitvoering van de nodige logica.
Een betere methode is het gebruik van teller/Timer 1 in de teller modus om te tellen de pulsen coming out DOUT. Dit vereist dat u DOUT Pin 5, de teller/Timer 1 externe klok pin verbinden. Elke pixel 24 bits van gegevens (vertegenwoordigd door een korte puls voor "0" of een lange voor "1") vereist, dus alles wat je hoeft te doen is instantiëren de grootste maat van de ring, dan het getal van pulsen geteld door 24 delen. Dit vertelt u hoeveel kleiner is de ring in gebruik (of helemaal), in vergelijking met de grootste ring. U kunt dus de werkelijke ringmaat berekenen en sla het op in een globale variabele voor gebruik waar nodig. Het maakt niet uit dat de Adafruit bibliotheek zal vervolgens worden verzenden van gegevens naar niet-bestaande pixels.