Auf der Seite LED mit HSL ansteuern ist es in Python gelungen, die drei LED mit Hilfe des HSL-Farbmodells in den Farben des Regenbogens aufzuleuchten. Jetzt sollen die drei LEDs versetzt in verschiedenen Farben des Regenbogens aufleuchten. Dazu wird das vorhandene Programm erweitert.
Zuerst wird der Block zum Füllen der LEDs in den ersten Teil der if-Entscheidung verschoben. Dann werden die drei LEDs einzeln angesprochen. Damit ändert sich am Aussehen auf dem Calliope mini noch nichts, aber man bekommt die Kontrolle über jede LED.
Da man mit HSL-Farben arbeitet, muss man für eine andere Farbe einfach nur einen Winkel zu addieren. Da wir drei LEDs haben, beträgt die Verschiebung je LED 120°. Bei der zweiten LED werden also zu hsl-Farbwert 120 und bei der dritten LED 240 addiert. Fertig!
Stop! Denkt man einen Moment länger nach, merkt man, dass das nicht funktionieren kann.
Wenn für die erste LED der Farbwert z.B.300 ist, dass berechnet sich der Farbwert für die dritte LED zu 300+240=540. Diesen Farbwert gibt es auf dem Farbkreis aber nicht.
Probiert man es trotzdem aus, funktioniert es. Irgendwie. Aber es ist nicht sauber.
Die eben gemachte Rechnung sollte zu einem Farbwert von 180 führen. Um dahin zu kommen, wird jeder berechnete Farbwert modulo 180 gerechnet. Das liefert den Rest, wenn wir die Zahl durch 360 teilen. Bis 360 kommt immer die erste Zahl als Ergebnis raus. Ab 360 erhält man die Differenz zum nächsten Vielfachen von 360. Wenn man also 540 durch 360 teil, erhält man 1 und der Rest ist 180. Und genau das ist der Wert, den man braucht.
Der Calliope mini bietet durch seine Pins eine einfache Möglichkeit an, eine große Anzahl von LEDs anzuschließen und diese auch einfach anzusteuern.
Im Versandhandel findet man LED-Streifen mit der LED WS2812B, die auch als Neopixel angeboten werden.
Im Beispiel wird ein Streifen verwendet, der 144 LEDs je Meter hat. Davon kommen zuerst 20 zum Einsatz. Der Streifen kann beliebig gekürzt oder verlängert werden.
Da eine große Anzahl von LEDs angesprochen werden soll, kann nicht mehr jede einzelne behandelt werden. Sie sind aber immer schön durchnummeriert, so dass man mit einer Zählschleife schnell zum Erfolg kommt.
Die Anzahl der LEDs wird in einer Variablen abgelegt und der Abstand wird daraus berechnet. Das eigentliche Programm kann nun auch verkürzt werden.
Am Aussehen auf dem Calliope mini ändert sich wieder nichts.
Schließt man den LED-Streifen mit den Anschlüssen für die Stromversorgung am Plus- und am Minuspol an und verbidet den Dateneingang mit dem Pin 0, reichen im Programm zwei kleine Änderungen, und der Regenbogen läuft über die LED-Leiste.
Es sieht aber so aus, als ob die Farben von rechts nach links laufen. Will man die entgegengesetzte Richtung haben, muss man mit der rechten LED anfangen. Das lässt ich aus der Anzahl und der Zählvariablen i berechnen. Da bei 20 LED die rechte aber die Nummer 19 hat, muss in der Rechnung immer noch 1 abgezogen werden.
Die Geschwindigkeit kann über die Wartezeit über die Ehöhung des HSL-Wertes verändert werden.
Es ist jetzt kein Problem, längere LED-Streifen anzuschließen.
Überraschender Weise schaffen die Stromversorgungspins am Calliope mini eine größere Anzahl LEDs. Für eine Lauflichtanzeige wurde ein Paneel mit 512 LED tagelang betrieben. Eventuell wird aber der Transistor rechts neben dem Reset-Knopf heiß. In diesem Fall hilft ein kleiner Kühlkörper, wie er im Versandhandel erhältlich ist.