Lektion 6 von 8Robotik mit LEGO SPIKE
Robotik mit LEGO SPIKE · Lektion 6 · 25 Minuten
Anzeige und Töne
Das lernst du
- Ein eigenes Bild als Liste von Listen bauen
- Einzelne Lichtpunkte mit Helligkeit steuern
- Eine Statusanzeige aus Messwerten berechnen
- Töne und Melodien abspielen
Der Code in dieser Lektion stammt aus dem Buch „Python für Roboter“, Kapitel 2.3, und läuft hier unverändert im Simulator. Zum Buch bei Amazon ↗
Die Anzeige als Liste von Listen
Die 5×5-Anzeige des Hubs kann mehr als fertige Icons. Ein eigenes Bild ist einfach eine Liste aus 5 Zeilen, und jede Zeile ist eine Liste aus 5 Helligkeiten von 0 (aus) bis 100 (ganz hell). Dieses Beispiel aus dem Buch malt ein X:
from pybricks.hubs import PrimeHub
hub = PrimeHub()
# Eigenes Muster: ein simples "X" auf der Matrix
muster_x = [
[100, 0, 0, 0, 100],
[0, 100, 0, 100, 0],
[0, 0, 100, 0, 0],
[0, 100, 0, 100, 0],
[100, 0, 0, 0, 100],
]
hub.display.icon(muster_x)Schau dir die Zahlen an: Die 100er bilden zwei Diagonalen – genau wie das X auf dem Hub.
Einzelne Punkte und Helligkeit
Mit hub.display.pixel(zeile, spalte, helligkeit) schaltest du einen einzelnen Punkt. Zeilen und Spalten zählen ab 0. Zusammen mit einer Schleife wird daraus eine kleine Animation:
from pybricks.hubs import PrimeHub
from pybricks.tools import wait
hub = PrimeHub()
for spalte in range(5):
hub.display.pixel(2, spalte, 100)
wait(200)
for helligkeit in [80, 60, 40, 20, 0]:
for spalte in range(5):
hub.display.pixel(2, spalte, helligkeit)
wait(150)Muster ausrechnen statt abtippen
Statt jedes Bild von Hand zu schreiben, kann dein Programm es berechnen. Hier entsteht eine Treppe:
from pybricks.hubs import PrimeHub
hub = PrimeHub()
treppe = []
for zeile in range(5):
reihe = []
for spalte in range(5):
if spalte <= zeile:
reihe.append(100)
else:
reihe.append(0)
treppe.append(reihe)
print(treppe)
hub.display.icon(treppe)So baust du Statusanzeigen, die sich nach Messwerten richten – etwa wie nah ein Hindernis ist oder wie voll der Akku noch ist. Das ist deine Aufgabe.
Töne und Melodien
Der Hub hat einen kleinen Lautsprecher. hub.speaker.beep(frequenz, dauer) spielt einen Ton – die Frequenz in Hertz (je höher, desto heller), die Dauer in Millisekunden. Mit play_notes() spielst du ganze Melodien: "C4/4" ist ein C in der 4. Oktave als Viertelnote, "R/8" eine Achtelpause.
from pybricks.hubs import PrimeHub
from pybricks.tools import wait
hub = PrimeHub()
# Drei Pieptöne, immer höher
for frequenz in [440, 660, 880]:
hub.speaker.beep(frequenz, 150)
wait(100)
# Eine kleine Fanfare
hub.speaker.play_notes(["C4/8", "E4/8", "G4/8", "C5/4", "R/8", "G4/8", "C5/2"], tempo=120)Im Simulator hörst du die Töne über deinen Lautsprecher. Mit dem Knopf 🔊 Ton an am virtuellen Hub schaltest du sie aus. Ein Ton ist ein super Signal: „Ziel erreicht“, „Hindernis!“ oder „Batterie fast leer“.
Tipp aus dem Buch: Eigene Muster sind super für kleine Statusanzeigen: ein Häkchen bei Erfolg, ein Ausrufezeichen bei einem Fehler oder ein Pfeil für die Fahrtrichtung.
Deine Aufgabe
Jetzt bist du dran
Bau eine Füllstandsanzeige für den Akku. Schreib eine Funktion fuellstand(prozent), die ein 5×5-Muster zurückgibt: Pro angefangene 20 % leuchtet eine Zeile mehr, von unten nach oben (Helligkeit 100). Bei 0 % ist alles aus, bei 1 bis 20 % leuchtet nur die unterste Zeile, bei 100 % alles. Zeig am Ende fuellstand(60) auf dem Hub an.
from pybricks.hubs import PrimeHub
hub = PrimeHub()
def fuellstand(prozent):
muster = []
# baue 5 Zeilen mit je 5 Werten
return muster
hub.display.icon(fuellstand(60))- Denkanstoß
Die oberen 2 Zeilen sind [0, 0, 0, 0, 0], die unteren 3 Zeilen [100, 100, 100, 100, 100].
- Welcher Befehl hilft?
Das Muster braucht immer genau 5 Zeilen mit je 5 Werten – auch wenn alles aus ist.
Die Anzahl der leuchtenden Zeilen ist (prozent
+19)//20. Eine Zeile leuchtet, wenn ihre Nummer>=5 -zeilen_anist. - Lückencode – ergänze die ___
from pybricks.hubs import PrimeHub hub = PrimeHub() def fuellstand(prozent): zeilen_an = ___ muster = [] for zeile in ___: if ___: muster.append(___) else: muster.append(___) return muster hub.display.icon(fuellstand(60))
Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.
Lösung anzeigen🔒 Erst nach allen Hinweisen oder 2 Prüf-Versuchen
Versuch es erst selbst – aus Fehlern lernt man am meisten. Hier ist eine mögliche Lösung:
from pybricks.hubs import PrimeHub
hub = PrimeHub()
def fuellstand(prozent):
zeilen_an = (prozent + 19) // 20
muster = []
for zeile in range(5):
if zeile >= 5 - zeilen_an:
muster.append([100, 100, 100, 100, 100])
else:
muster.append([0, 0, 0, 0, 0])
return muster
hub.display.icon(fuellstand(60))