RGB LED und Listen

Wir können uns einfach nicht entscheiden. Ständig sind wir am zweifeln. Hätten wir die Suppe oder doch lieber die Frühlingsrolle als Vorspeise nehmen sollen? Das Himbeereis oder doch lieber das Erdbeereis als Dessert? Die grüne oder doch lieber die rote LED? Aber die gelbe ist auch so toll…

Zumindest für diese eine, existentielle LED-Farben-Krise gibt es eine Lösung. Und diese nennt sich RGB-LED. Diese super LED kann nämlich in grün, rot oder blau erstrahlen. Jede dieser Farben steuerst du über ein bestimmtes Bein der RGB-LED an. Das lange Bein dient diesmal als Ground. Bitte beachte das.

Und da die RGB-LED ziemlich nah mit der normalen LED verwand ist, weißt du im Grunde genommen also schon, wie du die RGB-LED benutzen kannst. Es wird für dich also nun mal Zeit, ins kalte Wasser zu springen und ganz ohne Vorgaben deinen eigenen Code zu schreiben, um dieses Wunderwerk der Technologie zum Laufen zu bringen.

Damit du diese Aufgabe nicht ganz alleine bewältigen musst, geben wir dir den richtigen Schaltplan mit an die Hand. Dieser sorgt dafür, dass nichts aus Versehen in die Luft fliegt. Noch ein kleiner Tipp: Im äußersten Notfall weißt du ja Bescheid, wo du Hilfe finden kannst.

Listen

Nachdem du deine grauen Gehirnzellen mit etwas Eigeninitiative auf Trab gebracht hast, kannst du jetzt ja etwas Neues lernen.

Variablen kommen dir ja nun schon zur Genüge bekannt vor. Diese „Boxen“, in denen du alles Mögliche speichern kannst. Problematisch wird die Sache mit den Variablen, wenn du ganz viele Dinge speichern möchtest. Damit solche Geschichten nicht zu unübersichtlich werden, gibt es sogenannte Listen.

Eine Liste ist wie eine Variable, in der du mehrere Werte speichern kannst. Stell dir vor du möchtest ein Freundschaftbuch programmieren, in dem du Überblick über alle wichtigen Infos über deine Freunde hast. Würdest du dieses Beispiel mit normalen Variablen umsetzen, könnte das schnell unübersichtlich werden:

name = "Norbert"
lieblingsessen = "Nudelauflauf"
Hobby = "Fallschirmspringen"

Das ist sehr mühselig. Und stell dir vor du machst das für mehrere Freunde. Damit nichts durcheinander kommt, müsstest du die Variablen immer neu benennen, damit der Inhalt bei einem neuen Freund nicht einfach den Inhalt des alten Freundes überschreibt. Probleme über Probleme. Gehen wir schnell zu einer besseren Lösung mit Hilfe einer Liste über.

Du gibst einer Liste einen Namen und schreibst alles was gespeichert werden soll in eckige Klammern []. Alle Werte in den Klammern trennst du durch Kommata:

norbert = [5, "Nudelauflauf", "Fallschirmspringen"]

Die Liste bekommt einfach den Namen eines Freundes. In den eckigen Klammern kannst du nun alles Wichtige über deine Freunde speichern. In diesem Fall speichern wir das Alter, das Lieblingsessen und ein Hobby. Und das ist viel praktischer als mit einer Variablen.

Wenn du nun auf einen der Werte zugreifen möchtest, geht das auch ganz einfach. Allen Werten in der Liste wird eine Zahl zugeordnet. Der erste Wert bekommt die Nummer null, der zweite Wert die Nummer eins und immer so fortlaufend. Um nun auf deinen gewünschten Wert zuzugreifen, schreibst du einfach den Namen der Liste und direkt dahinter in eckigen Klammern die Nummer, die deinem gewünschten Wert zugeordnet ist:

norbert[1]

Auf welchen Wert greifen wir hier zu? Genau, auf das Lieblingsessen, den Nudelauflauf:

norbert[0]

Welcher Wert ist es jetzt? Wieder richtig! Diesmal ist es das Alter. Und wenn du einen Wert in deiner Konsole ausgeben möchtest, geht das auch ganz leicht:

norbert[2]

Aber du kannst natürlich auch die print()-Funktion verwenden:

print(norbert[2])

Jetzt bist du dran! Erstelle eine Liste mit deinem Namen und fülle sie mit deinem Lieblingsessen, deinem Hobby und deinem bevorzugten Zeichentrickcharakter. Lasse dir jeden Wert einmal ausgeben. Jetzt, da du Listen selber ausprobiert hast, fragst du dich sicher, wie du einen Fehler korrigieren kannst. Stell dir vor, du schreibst für dein Lieblingsessen aus Versehen Fischgrütze anstatt Himbeereis. Zum Glück kann man die einzelnen Werte, genau wie bei einer Variablen, ganz leicht verändern. Du wählst einfach den Wert aus, den du ändern möchtest und weist diesem Platz einen neuen Wert zu:

norbert[1] = "Himbeereis"

So leicht kannst du alles wieder in Ordnung bringen. Jetzt bist du dran! Tausche ein paar von deinen Werten aus. Probiere einfach etwas herum, um alles zu verstehen.

RGB-LED und Listen vereint

Wie immer ist ein praktisches Beispiel am besten. Und wild blinkende praktische Beispiele sind am allerbesten. Deswegen bauen wir jetzt eine Party-Beleuchtung mit der RGB-LED. Schalte die RGB-LED so an, wie es in dem Schaltplan aus der Lektion „RGB-LED“ gezeigt ist. Dann erstellst du eine neue Datei namens RGB-Party.py und pflegst folgenden Programmcode ein:

import RPi.GPIO as gpio
import time
import random

gpio.setmode(gpio.BCM)
ledPin = [18, 23, 24]
gpio.setup(ledPin[0], gpio.OUT)
gpio.setup(ledPin[1], gpio.OUT)
gpio.setup(ledPin[2], gpio.OUT)
while True:
    zufallsPin = random.randint(0,2)
    gpio.output(ledPin[zufallsPin], gpio.HIGH)
    time.sleep(1)
    gpio.output(ledPin[zufallsPin], gpio.LOW)

Ab Zeile 6 wird es spannend. Der Liste namens ledPin übergeben wir Zahlen. Diese Zahlen stehen für die GPIO-Pins, die wir ansprechen möchten. Alle schön ordentlich in einer Liste gespeichert.

In den folgenden drei Zeilen sagen wir den Pins – wie immer, wenn wir etwas leuchten lassen wollen -, dass sie ein Output sein sollen, also uns Strom schicken sollen. Das realisieren wir ganz elegant – wie wir es vorhin gelernt haben – mit der Zugriffsmethode für die verschiedene Werte in der Liste.

Etwas Neues kannst du in Zeile 11 finden. Wir erstellen eine Variable namens zufallszahl und weisen dieser Variable einen Wert zu, der von der Funktion random.randint() ausgespuckt wird.

Man übergibt dieser Funktion zwei Zahlen. So wie hier:

random.randint(0, 5)

In diesem Fall würde die Funktion eine zufällige Zahl von 0 bis einschließlich 5 ausspucken. Im Programmbeispiel liefert diese Funktion also einen zufälligen Zahlenwert von 0 bis einschließlich 2. Denk dran, dass man in einer Liste bei null anfängt zu zählen. Wir bekommen also eine zufällige Zahl von 0 bis einschließlich 2, was zufälligerweise einen der Pins der RGB-LED anspricht.

Da die while-Schleife immer wieder durchläuft und die Funktion so immer wieder neu angesprochen wird, wird auch immer eine neu Zufallszahl generiert und nach jedem Durchlauf leuchtet eine andere Farbe.

Wenn du genug von dem Programm hast, kannst du es mit mit Strg + c, oder ctrl + c beenden.

Jetzt bist du dran! Schaffst du das Gleiche mit zwei RGB-LEDs und so, dass immer nur eine oder beide gleichzeitig leuchten?