Kategorien
Honor Technology Micropython / Pico

Pico – Listed Lights

Wir schauen hinter die technische Kulisse von Lauflicht – Mustern und widmen uns dabei:
– dem Datentyp ‚list‚ in Python
– der ‚input‚ – Funktion und ihrer Verwendung
– einigen Besonderheiten beim Umgang mit Listen

Natürlich wie immer möglichst wenig theoretisch ausschweifend und mit einem Bezug zur praktischen Anwendung mit Beispielen.

Das Video zum Beitrag

Zuerst einmal sind hier ein paar nützliche Links:


Der Datentyp list gehört zu den Sequenziellen Datentypen. Diese definiert die Fachliteratur wie folgt:

Unter sequenziellen Datentypen wird eine Klasse von Datentypen zusammengefasst, die Folgen von gleichartigen oder verschiedenen Elementen verwalten. die in sequenziellen Datentypen gespeicherten Elemente haben eine definierte Reihenfolge und man kann über eindeutige Indizes auf sie zugreifen.

Zu diesen Datentypen gehören auch noch andere Typen wie z.B. Strings,
Byte Arrays oder Tuples.

list ist dabei ein veränderlicher Typ und kann in Python auch unterschiedliche Datentypen aufnehmen.
Du erzeugst eine Liste wie folgt:

bezeichner = []

Damit hast du eine leere Liste erzeugt. Du kannst sie auch schon bei der Vereinbarung mit unterschiedlichen Daten füllen:

meineListe = [1, 2, "hallo", 3.33, True]

Hier hast du eine vorinitialisierte Liste mit fünf Elementen. Den Elementen werden dabei automatisch die Indizes 0 bis 4 zugewiesen, mit denen du auf die einzelnen Elemente zugreifen kannst:

element1 = meineListe[0]    

Hier hätten wir jetzt also das erste Element ( 1) der liste in die Variable element1 gespeichert.

Du kannst an eine Liste auch Elemente anhängen. Das übernimmt die Methode append , die auf eine Liste angewendet werden kann.

meineListe.append("Ich bin angehängt")

In meinem Beispiel habe ich sieben 3,3v Verbraucher ( hier LEDs) an meinen Raspberry Pi Pico angeschlossen ( Pins 0 bis 6 ) und füge diese in eine Liste mit Hilfe einer for – Schleife ein.

import machine

liste = []

for p in range(7):
    led = machine.Pin(p, machine.Pin.OUT)
    liste.append(led)

Da die for – Schleife hier von 0 bis 6 zählt, kann ich die Schleifenvariable p für die Pin-Nummer verwenden. Jeder Duchlauf hängt also ein LED an die Liste an.

Hier noch einmal der Board-Aufbau grafisch dargestellt:

Jetzt, da alle sieben LEDs in der liste gespeichert sind, kann auf sie entweder über eben die sogenannte Subsequence [n] zugegriffen werden:

meinLED = liste[3]

Oder man könnte mit einer for – Schleife auch direkt jedes Element in der Liste ansprechen:

for led in liste:
    led.value(1)

Zum Schluss ist hier noch ein Beispiel einer Funktion, die abwechselnd alle LEDs in der Liste mit einem geraden Index und alle mit einem ungeraden Index blinken lässt. Dieser Wechsel soll vier mal ausgeführt werden. Dazu verwenden wir eine äußere und zwei innere Schleifen.
Falls es hier Unklarheiten gibt, hoffe ich, dass meine ausführlichen Kommentare in der Code-Datei: listed_lights.py im GitHub Repo helfen können.

def blinkEvenOdd():
    for t in range(4):
        for index in range(len(lights)):
            if index % 2 == 0:
                lights[index].value(1)
            else:
                lights[index].value(0)
        utime.sleep(0.3)

        for index in range(len(lights)):
            if index % 2 == 0:
                lights[index].value(0)
            else:
                lights[index].value(1)
        utime.sleep(0.3)

Weil ich im Video auch die input Funktion verwende, um ein wenig Interaktion mit dem Programm zu schaffen, hier noch einmal die Hinweise zu dieser Funktion:

x = input("Eingabe: ")

Wichtig zu wissen: der Typ der Eingabe ist immer ein String. Wenn du also eine Zahl erwarten würdest, mit der du rechnen kannst, müsstest du die Eingabe umwandeln ( Type Casting ).

x = int(input("Eingabe: "))

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert