Die RGB-LED hat in ihrem Innern drei einzeln ansteuerbare LED in den Farben Rot, Grün und Blau. Die Helligkeit jeder Farbe kann unabhängig gesteuert werden, so dass sich eine Unmenge von verschiedenen Farben mischen lassen.
Die Helligkeit jeder LED kann in Zahlen zwischen 0 (aus) bis 255 (ganz hell) angegebebn werden. Sind alle drei LED voll an, erscheint sie uns in der Farbe weiß.
Als erstes soll die LED in weiß leuchten und die eine der drei Farben soll langsam dunkler werden.
Für die drei Farbwerte werden drei Variablen erzeugt und diese gleich auf volles Licht, also 255, gesetzt. Dann wird die LED mit diesen drei Helligkeitswerten angesteuert, sie leuchtet weiß. Der weiß-Wert in dem Programmblock muss nicht gesetzt werden.
Danach wird der Anteil des roten Lichtes in Einerschritten bis auf Null verkleinert und die neuen Farbwerte jeweils an die LED gegeben. Damit man überhaupt einen Effekt sieht, muss nach jedem Schritt gewartet werden.
Am Ende leuchtet die LED in Cyan, da nur noch Grün und Blau angeschaltet sind.
Aufgabe: Ändere das Programm so, dass die blaue oder die grüne LED ihre Helligkeiten ändern. Welche Farben entstehen jetzt am Ende der Schleife?
Will man nun mehrere Farbwechsel hintereinander durchführen, wird das Programm sehr lang und damit unübersichtlich. Deshalb lagert man Programmteile, die mehrmals verwendet werden, aus und nennt diesen Programmteil dann Funktion. Eine Funktion hat einen eindeutigen, frei wählbaren Namen und wird über diesen aufgerufen.
Es soll eine Funktion geschrieben werden, die die rote LED langsam ausgehen lässt. Der Name der Funktion ist rot_aus. Und genau mit diesem Namen wird sie aufgerufen.
Die Funktion enthält den gesamten Block zum Runterfahren der Rothelligkeit und wird im Hauptprogramm über ihren Namen aufgerufen.
Um bei großen Programmen den Überblick zu behalten, können fertige Blöcke zusammengefaltet werden. Sie sind dann noch komplett da, nehmen aber nur noch eine Zeile auf dem Bildschirm ein.
Aufgabe: Falte die beiden Funktionen zusammen.
Es soll nun ein komplettes Farbenspiel programmiert werden. Dazu muss jede Farbe an- und ausgeschaltet werden können.
Aufgabe: Schreibe vier weitere Funktionen: gruen_an, gruen_aus, blau_an, blau_aus. Nutze dabei unbedingt die Kopieren-Funktion (Rechte Maustaste!)
Der Hauptteil des Programmes sieht dann so aus:
Die Funktionen ähneln sich im Aufbau. Deshalb ist es sinnvoll, das Ein- und Ausschalten der LED von einer einzigen Funktion machen zu lassen. Der Funktion muss dann immer nur die jeweilige Farbe und das gewünschte Ereignis zu übergeben.
1. Schritt: Auswahl der Farbe bei Einschalten.
Der neuen Funktion wird als erstes in Form einer Zeichenkette die Farbe übergeben, die geschaltet werden soll. Damit werden aus den sechs Funktionen nur noch vier.
2. Schritt: An und Aus werden als Text in ereignis übergeben. Zu Beginn der Funktion wird dann eine Variable schritt aus 1 oder -1 gesetzt. Die Anweisung erhöhe... nutzt diese Variable.
Die RGB-LED hat in ihrem Innern drei einzeln ansteuerbare LED in den Farben Rot, Grün und Blau. Die Helligkeit jeder Farbe kann unabhängig gesteuert werden, so dass sich eine Unmenge von verschiedenen Farben mischen lassen.
Die Helligkeit jeder LED kann in Zahlen zwischen 0 (aus) bis 255 (ganz hell) angegebebn werden. Sind alle drei LED voll an, erscheint sie uns in der Farbe weiß.
Als erstes soll die LED in weiß leuchten und die eine der drei Farben soll langsam dunkler werden.
Für die drei Farbwerte werden drei Variablen erzeugt und diese gleich auf volles Licht, also 255, gesetzt. Dann wird die LED mit diesen drei Helligkeitswerten angesteuert, sie leuchtet weiß.
Danach wird der Anteil des roten Lichtes in Einerschritten bis auf Null verkleinert und die neuen Farbwerte jeweils an die LED gegeben. Damit man überhaupt einen Effekt sieht, muss nach jedem Schritt gewartet werden.
Am Ende leuchtet die LED in Cyan, da nur noch Grün und Blau angeschaltet sind.
Aufgabe: Ändere das Programm so, dass die blaue oder die grüne LED ihre Helligkeiten ändern. Welche Farben entstehen jetzt am Ende der Schleife?
Will man nun mehrere Farbwechsel hintereinander durchführen, wird das Programm sehr lang und damit unübersichtlich. Deshalb lagert man Programmteile, die mehrmals verwendet werden, aus und nennt diesen Programmteil dann Funktion. Eine Funktion hat einen eindeutigen, frei wählbaren Namen und wird über diesen aufgerufen.
Es soll eine Funktion geschrieben werden, die die rote LED langsam ausgehen lässt. Der Name der Funktion ist rot_aus. Und genau mit diesem Namen wird sie aufgerufen.
Die Funktion enthält den gesamten Block zum Runterfahren der Rothelligkeit und wird im Hauptprogramm über ihren Namen aufgerufen.
Um bei großen Programmen den Überblick zu behalten, können fertige Blöcke zusammengefaltet werden. Sie sind dann noch komplett da, nehmen aber nur noch eine Zeile auf dem Bildschirm ein.
Aufgabe: Falte die beiden Funktionen zusammen.
Es soll nun ein komplettes Farbenspiel programmiert werden. Dazu muss jede Farbe an- und ausgeschaltet werden können.
Aufgabe: Schreibe vier weitere Funktionen: gruen_an, gruen_aus, blau_an, blau_aus. Nutze dabei unbedingt die Kopieren-Funktion (Rechte Maustaste!)
Der Hauptteil des Programmes sieht dann so aus:
Der Regenbogen beginnt mit Rot und geht dann über Gelb, Grün, Cyan, Blau, Violett wieder zu Rot über. Damit ist der Farbkreis geschlossen. Weiß taucht hier gar nicht mehr auf.
Stelle das Programm so um, dass die LED den Regenbogen anzeigt.
Das Video zeigt den Farbverlauf für einen Regenbogen. Zur besseren Sichtbarkeit ist die LED mit einem Stück Papier abgedeckt.
Die Funktionen ähneln sich im Aufbau. Deshalb ist es sinnvoll, das Ein- und Ausschalten der LED von einer einzigen Funktion machen zu lassen. Der Funktion muss dann immer nur die jeweilige Farbe und das gewünschte Ereignis zu übergeben.
1. Schritt: Auswahl der Farbe bei Einschalten.
Der neuen Funktion wird als erstes in Form einer Zeichenkette die Farbe übergeben, die geschaltet werden soll. Damit werden aus den sechs Funktionen nur noch vier.
2. Schritt: An und Aus werden als Text in ereignis übergeben. Zu Beginn der Funktion wird dann eine Variable schritt aus 1 oder -1 gesetzt. Die Anweisung ändere... nutzt diese Variable.
Jede der drei Neopixel-LEDs hat in ihrem Innern drei einzeln ansteuerbare LED in den Farben Rot, Grün und Blau. Die Helligkeit jeder Farbe kann unabhängig gesteuert werden, so dass sich eine Unmenge von verschiedenen Farben mischen lassen.
Die Helligkeit jeder LED kann in Zahlen zwischen 0 (aus) bis 255 (ganz hell) angegebebn werden. Sind alle drei LED voll an, erscheint sie uns in der Farbe weiß.
Da die Neopixel-LEDs seeeehr hell werden (Augenkrebs!), werden sie nur bis zur Helligkeit 100 eingeschaltet.
Hinweis: In der Simulation im rechten Teil der Entwicklungsumgebung funktioniert die Anzeige der LEDs nicht. Die Programme müssen auf einem realen Calliope mini V3 ausgeführt werden. (Stand Februar 2025)
Als erstes muss das Modul für die Neopixel importiert werden und die Neopixel-Instanz in der Variablen np gespeichert werden. Erst dadurch lassen sich die RGB-LEDs über die Variable np ansprechen.
Die drei Variablen für die Farben werden auf den Startwert 100 gesetzt und die LED damit gefüllt. In einer Schleife, die 100 Mal durchlaufen wird, erniedrigt man den Wert für Rot jeweils um 1 und füllt die LED mit den neuen Werten.
Das Anzeigen der LEDs nach dem Füllen ist unbedingt notwendig und wird häufig vergessen. Ansonsten sieht man keine Änderungen der LED-Farben.
Da np.show() eine Methode des LED-Objektes ist, darf auch die Klammer nicht vergessen werden (ein beliebter Fehler!).
Der Farbwechsel soll nun nicht mehr im Hauptprogramm erfolgen, sondern wird in die Funktion wechsel() ausgelagert. Leider gibt es da aber eine Fehlermeldung: "rot"is possibly unbound
Die Variable rot wird auserhalb der Funktion auf den Wert 100 festgelegt. Damit kann sie innerhalb der Funktion zwar gelesen, aber nicht verändert werden. gruen und blau bereiten keine Probleme, da sie ja nur gelesen werden.
Der Fehler wird beseitigt, indem man der Funktion den Farbwert beim Aufruf mit übergibt.
Übergibt man der Funktion wechsel noch einen weiteren Wert, kann man die rote Farbe bei 0 ausschalten und bei 1 einschalten. Aber auch das funktioniert nicht richtig. Grund: Die Variable rot wird der Funktion übergeben. In der Funktion wird der Wert der Variablen verändert und die LEDs entsprechend angezeigt. Aber das stimmt nicht: Die Variable rot ist in der Funktion eine ander Variable als außerhalb der Funktion. Sie können beide den gleichen Namen haben, sind aber nicht identisch.
Da das verwirrend ist, benennt man die Variable in der Funktion in r um. Damit die Welt außerhalb der Funktion etwas von der Veränderung erfährt, gibt man zum Schluss den Wert von r mit return(r) zurück und muss ihn noch der Variablen rot zuweisen.
Packt man die beiden wechsel-Befehle in eine unendliche Schleife, wechseln die LEDs ihre Farbe ununterbrochen von Weiß zu Cyan und zurück.
Da nun alle drei Farben ein- und ausgeblendet werden sollen, könnte man für jede Farbe eine solche Funktion schreiben. Es geht aber auch einfacher.
Die drei Farben werden in einer Liste gespeichert und auf diese Liste wird zugegriffen. farben[0] ist jetzt rot, farben[1] gruen und farben[2] blau.
Das Hauptprogramm muss dann auch noch geändert werden. Wenn alles richtig funktioniert, ändert sich am Farbwechsel beim Calliope mini nichts.
Warum dann der Aufwand?
Es ist nun möglich, der Funktion wechsel einfach die gesamte Liste zu übergeben und die Funktion gibt die gesamte Liste wieder zurück. Es muss also nicht jede einzelne Farbe behandelt werden, sondern die Farben werden als Paket hin- und hergereicht.
Übergibt man nun der Funktion als einen weiteren Parameter auch noch die Position der Liste, die geändert werden soll (=Farbe), kann man jede Farbe mit einer einzigen Funktion ändern.
Der im Video gezeigt Farbwechsel wird dann durch sechs Aufrufe der wechsel-Funktion realisiert.
Der Regenbogen beginnt mit Rot und geht dann über Gelb, Grün, Cyan, Blau, Violett wieder zu Rot über. Damit ist der Farbkreis geschlossen. Weiß taucht hier gar nicht mehr auf.
Stelle das Programm so um, dass die LED den Regenbogen anzeigt.
Das Video zeigt den Farbverlauf für einen Regenbogen.