Schritt 4: Wie es funktioniert
Für dieses Projekt haben wir drei "Farbflecken" führt hin und her entlang den Streifen mit unterschiedlichen Geschwindigkeiten. Wenn Flecken über einander laufen, führt Überlagerung von rot, grün und blau in verschiedenen Farben. Wir halten Sie Position und Geschwindigkeit von jedem Fleck in Variablen und wir eine Farbe für jede LED auf jedem Neuzeichnen neu berechnen müssen. Während wir es viele Male pro Sekunde tun können, wird die Animation glatt aussehen.
Jede Farbkomponente eines Pixels ist proportional zur exp(-d*d), wo d Abstand zwischen den Pixel und das Zentrum der Ort der entsprechenden Farbe. Mit anderen Worten Pixelfarben repräsentieren eine normale Verteilung (Gaußsche) – Es ist genau das gleiche wie mit "Gaußschen Weichzeichner" Filter im Grafik-Editor.
Die Exponent Funktion Arduino Bibliothek erschien sehr langsam zu sein, also machte ich eine Annäherung mit nur zwei Multiplikationen und einer Abteilung: 1.0/(1.0-(0.634-1.344*x)*x). Bitte beachten Sie, dass diese Näherung nur für x < 0geeignet ist.
Wir berechnen die Farbe jedes Pixels in Schleife und senden Sie es an einen Speicherpuffer durch Aufrufen von strip.setPixelColor(). Wenn wir über jedes Pixel geloopt nennen wir strip.show() und NeoPixel Bibliothek sendet alle Daten synchron auf angegebene Pin – alle Pixel, eins nach dem anderen, 24 Bit Farbdaten für jedes Pixel. Erste NeoPixel ersten 24 Bit Daten liest, speichert es lokal in einem Register und andere Daten durch nächsten Pixel übergibt. Zweite "Pixel" nimmt seine Daten und sendet Rest zum nächsten – und so weiter und so fort, bis jedes Pixel es Daten bekommt. Du kannst sicher weniger Daten als Anzahl LEDs Sie in einem Streifen haben – nur erste NUMPIXELS funktioniert dann.
Der Code ist gut dokumentiert (hoffentlich!), und bitte stellen Sie Fragen in den Kommentaren hier!