Den Drehregler KY 040 und die NeoPixel-LED-Matrix WS2812B-64 gibt es im Versandhandel für wenige Euro zu kaufen. Sie lassen sich leicht an den 4 Pins des Calliope mini anschließen und werden von Make Code super unterstützt.
Die Matrix benötigt außer der Stromversorgung (3,3 V!) nur noch einen Anschluss. Damit kann man jede der 64 LED einzeln ansprechen und sie in verschiedenen Farben und Helligkeiten aufleuchten lassen. Wenn man möchte, können weitere Module in Reihe angeschlossen werden.
Der Drehregler benötigt ebenfalls die Stromversorgung und hat drei Ausgänge. Zwei dienen zum Erkennen der Drehrichtung und am dritten Anschluss liegt der Druckschalter des Reglers.
Der Calliope mini, die LED-Matrix und der Drehregler werden auf einer Platte aus PVC montiert. Bewährt hat sich eine Bastelplatte der Firma Gutta, die im Baumarkt erhältlich ist. Das Material gibt es in verschiedenen Farben, es lässt sich leicht Bohren und kann mit einen Teppichmesser leicht geschnitten werden.
Die LED-Matrix hat oben drei Anschlüsse für die Versorgungsspannung und den Dateneingang. Um unteren Ende kann von drei weiteren Anschlüssen aus die Spannung und das Datensignal zu einer weiteren Matrix gefüührt werden.
Der Anschluss wird über 3 mm-Senkkopfschrauben und entsprechende Flügelmuttern an den Pins des Calliopem mini realisiert. Die Kabelenden erhalten zum Anschluss M5 Ringkabelschuhe. Damit kann der Calliope mini leicht von der Platte entfernt werden.
Vor dem Programmieren müssen die beiden Treiber für den Drehregler und die Matrix geladen werden. Diese stehen kostenlos in den Erweiterungen zur Verfügung: Fortgeschritten...Erweiterungen...
Bevor es losgeht,müssen die richtigen Anschlüsse für die beiden Erweiterungen angegeben werden. Falls man andere Anschlüsse verwendet, muss das natürlich geändert werden.
Das erste kleine Programm dient nur dem Test des Drehreglers und der LED-Matrix und zeigt, wie einfach deren Programmierung ist. Wenn alles funktioniert, werden die Farben des Regenbogens über alle 64 LEDs verteilt und der Drehregler lässt die Farben auf der Matrix rotieren.
Der Drehregler soll jetzt einen einzelnen, leuchtenden Punkt steuern. Dazu werden zwei Variable x und y benutzt. Der Drehregler steuert zuerst nur den x-Wert, der y-Wert ist fest eingestellt und wird später verändert.
Wichtig ist der Befehl zum Anzeigen. Sämtliche Befehle für die NeoPixel verändern nur einen Speicherinhalt. Erst durch den entsprechenten Befehl wird die Änderung sichtbar. Dieses Verhalten spart sicher Rechenzeit, ist aber manchmal verwirrend.
Das Programm sieht einfach und logisch aus. Es funktioniert aber nicht. Das Setzen eines Punktes bewirkt nicht, das ein anderer gelöscht wird.
Damit der Pukt wirklich wandert, wird das Löschen der ursprünglichen LED, das Hochzählen des x-Wertes und Anzeigen der neuen LED in das Ereignis gelegt, dass der Drehregler bei einem Schritt auslöst.
Das sieht schon besser aus. Aber noch wandert der Punkt aus der Matrix heraus. Es muss also vor dem Ändern des x-Wertes noch geprüft werden, ob der Punkt noch in den Grenzen der Matrix ist.
Wie zu Beginn zu sehen war, können die LEDs viele verschieden Farben annehmen. Der Punkt soll nun bei jedem Schritt seine Farbe entsprechend dem Regenbogen ändern. Als Farbmodell kommt dazu der HSV-Farbraum zur Anwendung.
An Stelle der Farbe rot wird jetzt der Block für die HSL-Farbe verwendet. (Der Unterschied zwischen HSV und HSL ist im verlinkten Artikel beschrieben)
Die Farbe wird über die Variable farbe zu Beginn auf 0 festgelegt. Das entspricht wieder rot. Die Sättigung wird auf 100 eingestellt. Damit erhält man satte Farben. Damit das Licht nicht zu sehr blendet, reicht eine Helligkeit von 10% aus.s
Bei jedem Schritt des Drehreglers soll die Farbe geändert werden. Da es eine Vor- und einen Rückschritt gibt, müsste die Farbänderung in jeden der beiden Schritte identisch eingebaut werden. Da ist es besser, die Farbänderung in eine Funktion zu packen und diese Funktion bei jedem Schritt aufzurufen.
Durch das HSL-Farbmodell reicht für die Farbangabe eine Zahl zwischen 0 und 360. Bei jedem Schritt wird die Farbe einfach um 5 geändert und bei 360 wieder auf 0 gesetzt. Damit kann man den ganzen Farbkreis in 5er-Schritten anzeigen. Die Schrittweite lässt sich natürlich individuell einstellen.
Mit jedem Schritt des Drehreglers wandert der Punkt nach rechts oder links und ändert seine Farbe.
Bis jetzt kann der Punkt nur waagerecht bewegt werden. Über einen Umschalter soll er nun auch noch senkrecht wandern können.
Als Schalter wird der im Drehschalter vorhandene Druckschalter verwendet. Bei jedem Druck wird die Richtung von waagerecht in senkrecht und umgekehrt umgeschaltet. Bewegt wird die Punkt wieder mit dem Drehschalter.
Die Variable richtung wird im Startblock auf wahr gesetzt. Das heißt, sie ist vom Typ Boolean und kann direkt in Entscheidungen verwendet werden. Das Umschalten erfolgt durch eine einfache Negation des Wertes.
Im Block, der beim Drehen des Schalters aufgerufen wird, erfolgt nach dem Löschen des bisherigen Punktes die Entscheidung, ob die x- oder die y-Variable verändert werden soll. Das Aufleuchten des Punkes an der neuen Position wurde auch noch in die Funktion schritt verlagert. Dadurch wird das Programm kürzer und übersichtlicher.
Idee für ein Spiel:
Auf der Matrix erscheint alle 4 s zufällig ein Punkt, der mit dem steuerbaren Punkt innerhalb dieser Zeit eingefangen werden muss. Die Koordinaten dieses Zielpunktes sind ziel_x und ziel_y. Damit dieser Punkt nicht zufällig auf dem steuerbaren Punkt liegt, werden die Zielkoordinaten mit den Koordinaten des steuerbaren Punktes gleichgesetzt und dann solange zufällige x- und y-Werte bestimmt, bis sie nicht mehr übereinstimmen.
Man kann sich nun überlegen, wie man daraus ein Spiel entwickelt! Möglich Ideen wären: