LED Display
Dies ist eine Kurzanleitung für einige Dinge, die du mit dem LED Display machen kannst. Probiere die Dinge aus - schau, was passiert und was du alles machen kannst. Es gibt 25 LEDs, nummeriert von (0,0) in der oberen linken Ecke bis (4,4) in der unteren rechten Ecke und sie können alle auf verschiedene Helligkeitsstufen eingestellt werden.
Du kannst die LEDs wie einen Bildschirm benutzen, um einzelne Zeichen, eine Zeichenkette oder ein kleines Bild anzuzeigen.
Grundfunktionen
Einen String oder ein Bild anzeigen
Du kannst Zeichen - sogenannte Strings - oder Bilder auf dem LED Display mit der Methode display.show() anzeigen:
from microbit import *
display.show("Hallo")
Die Zeichen, die du auf dem Display anzeigst, müssen als Strings innerhalb eines Paares von Anführungszeichen
stehen, entweder “ “ oder ‚ ‚.
Bilder benötigen keine Anführungszeichen, da sie ja keine Strings sind. Das microbit Modul hat schon viele
Bilder eingebaut, die auf dem Display angezeigt werden können.
Um zum Beispiel eine lächelndes Gesicht anzuzeigen, kannst du das vorhandene Image-Objekt verwenden. Die vorhandenen
Bilder werden dir von der Autovervollständigung im Mu-Editor zur Auswahl vorgeschlagen, nachdem du einen Punkt nach Image.
eingegeben hast.
from microbit import *
display.show(Image.HAPPY)
Hier sind einige der anderen Bilder, die du verwenden kannst:
Image.HEART,Image.HEART_SMALL
Image.HAPPY,Image.SMILE,Image.SAD,Image.CONFUSED,Image.ANGRY,Image.ASLEEP,Image.SURPRISED,Image.SILLY,Image.FABULOUS,Image.MEH,Image.YES,Image.NO
Image.ARROW_N,Image.ARROW_NE,Image.ARROW_E,Image.ARROW_SE,Image.ARROW_S,Image.ARROW_SW,Image.ARROW_W,Image.ARROW_NW
Image.MUSIC_CROTCHET,Image.MUSIC_QUAVER,Image.MUSIC_QUAVERS
Image.XMAS,Image.PACMAN,Image.TARGET,Image.ROLLERSKATE,Image.STICKFIGURE,Image.GHOST,Image.SWORD,Image.UMBRELLA
Image.RABBIT,Image.COW,Image.DUCK,Image.HOUSE,Image.TORTOISE,Image.BUTTERFLY,Image.GIRAFFE,Image.SNAKE
Eine Laufschrift anzeigen
Benutze scroll, um einen String am Display als Laufschrift anzuzeigen
from microbit import *
display.scroll("Hallo!")
Eine Zahl anzeigen
Inzwischen zeigt der Befehl display.show(6) wirklich die Zahl 6 an, obwohl sie nicht in Anführungszeichen steht.
Normalerweise führt das zu einem Fehler namens TypeError, da wir weiter oben ja gelernt haben, dass ein String and Bytes literals-Wert
erwartet wird. Das ist zwar ganz praktisch, aber völlig untypisch für Python. Du solltest dich deshalb nicht darauf verlassen und
Zahlen vorher immer in Strings umwandeln!
Das geht ganz einfach mit der str()-Methode. Probiere die unterschiedlichen show-Aufrufe aus,
indem du die jeweilige Zeile „auskommentierst“ (dh die Raute # am Zeilenanfang löschst)
from microbit import *
display.show(str(6)) # korrekte Typumwandlung
display.show(6) # funktioniert leider auch
#display.show(str(3.14)) # korrekte Typumwandlung
#display.show(3.14) # funktioniert leider auch
#display.show("3,14") # Vorsicht: Dezimalzeichen ist der Punkt!! Hier egal weil String.
#display.show(31,1408) # leider kein TypeError: Anzeige 31 mit 1408ms Verzögerung zw. 3 und 1
#display.show(str(3,14)) # TypeError
Dass die Methode show() „anwenderfreundlicher“ gemacht wurde, führt im Zusammenhang mit Zahlen unter
Umständen zu schwer nachvollziehbarem Verhalten - also Vorsicht!
Löschen des Displays
Wenn du das LED Display löschen möchtest, kannst du dies wie folgt tun:
from microbit import *
display.clear()
Fortgeschrittene Funktionen
Ein Pixel setzen
Du kannst die Helligkeit eines Pixels auf dem LED Display mit der Methode set_pixel(spalte,zeile,hellligkeit)
einstellen oder ein- und ausschalten, indem du die Koordinaten eines Pixels (x-Spalte,y-Zeile) verwendest:
from microbit import *
display.set_pixel(0,4,9)
Das setzt die LED in Spalte 0 und Zeile 4 auf eine Helligkeit von 9. Der Helligkeitswert
kann eine ganze Zahl zwischen 0 und 9 sein. 0 schaltet die LED aus und 9 ist die hellste Einstellung.
Der folgende Code setzt mit einer For Schleife jedes der Pixel in der oberen Zeile (y=0) auf
volle Helligkeit (9):
from microbit import *
for x in range(5):
display.set_pixel(x,0,9)
sleep(500)
Aufgaben:
Passe den Code aus dem Beispiel so an, dass er die Pixel der ersten Spalte statt der ersten Zeile zum Leuchten bringt.
Passe das Programm so an, dass die mittlere Pixelreihe anstelle der oberen Reihe eingeschaltet wird.
Schreibe ein Programm, das das mittlere Pixel jede halbe Sekunde an- und ausblinken lässt.
Du könntest verschachtelete For-Schleifen verwenden, um alle LEDs nacheinander einzustellen:
from microbit import *
display.clear()
for y in range(0, 5):
for x in range(0, 5):
display.set_pixel(x,y,9)
sleep(100)
Die for- Schleife lässt dich eine Schleife mit Hilfe eines Zählers eine bestimmte Anzahl von Malen
ausführen. Die äußere Schleife:
for y in range(0,5)
führt die Schleife fünfmal aus und ersetzt y durch aufeinanderfolgende Werte im Bereich 0 bis 4
für y. Die Schleife hört auf, bevor sie den letzten Wert im angegebenen Bereich erreicht.
Die innere Schleife:
for x in range(0,5):
führt die Schleife fünfmal aus und ersetzt x jedes Mal durch aufeinanderfolgende Werte aus dem Bereich 0
bis 4. So werden der Reihe nach also für jede Zeile alle Pixel gesetzt.
Aufgabe:
Wie muss die For Schleife aussehen, damit die Pixel spaltenweise gesetzt werden?
Erweitere den Beispielcode, damit die Pixel auch wieder ausgeschaltet werden. Um sie in umgekehrter Reihenfolge auszuschalten, brauchst du eine Schleife, die rückwärts zählt. Ein Beispiel dafür wäre,
for x in range(4,-1,-1):Schreibe ein Programm, das die einzelnen Pixel des Displays ein- und ausblinken lässt. Es sollte so aussehen, als würde das blinkende Pixel über die ganze Matrix wandern.
Schreibe ein möglichst kurzes Programm, um am Display ein Quadrat kleiner und größer werden zu lassen.
Eigene Bilder
Was ist, wenn du dein eigenes Bild für das Display auf dem micro:bit erstellen möchtest?
Wie bereits erwähnt, kann jedes LED-Pixel auf dem Display auf einen von zehn Werten von 0 (aus) bis 9 (voll ein) eingestellt werden. Mit dieser Information ist es möglich, ein neues Bild wie dieses zu erstellen
from microbit import *
boot = Image("05050:"
"05050:"
"05050:"
"99999:"
"09990")
display.show(boot)
Eigentlich brauchst du das nicht über mehrere Zeilen zu schreiben. Wenn du den Überblick über jede der Zeilen behältst, kannst du den Code so umschreiben:
boot = Image("05050:05050:05050:99999:09990")
(Wenn es funktioniert, sollte das Gerät ein altmodisches „Blue Peter“ Segelschiff anzeigen wobei die Masten dunkler sind als der Rumpf des Schiffes).
Weißt du jetzt, wie man ein Bild malt? Was du dir merken solltest ist, dass jede Zeile des
Displays durch eine Zeile aus Zahlen dargestellt wird, die mit : endet und
zwischen " Anführungszeichen eingeschlossen ist!
Jede Zahl gibt eine Helligkeit an. Es gibt fünf Zeilen mit fünf Zahlen, so dass es möglich ist, die individuelle Helligkeit für jedes der fünf Pixel auf jeder der fünf Zeilen auf dem Display einzustellen und anzuzeigen.
Welches Bild ist hier zu sehen?
from microbit import *
meinBild = Image("00900:"
"09090:"
"90009:"
"05550:"
"05950")
display.show(meinBild)
Animation
Um eine Animation zu machen, verwendet man am einfachsten eine Liste von Bildern.
Wir können das anhand von bereits eingebauten Listen demonstrieren - Image.ALL_CLOCKS
und Image.ALL_ARROWS:
from microbit import *
display.show(Image.ALL_CLOCKS, loop=True, delay=100)
Der micro:bit zeigt jedes Bild in der Liste an, eines nach dem anderen. Wenn du loop=True
einstellst, wird das Programm in einer Schleife durch die Liste laufen, ohne Ende. Es ist auch
möglich eine Verzögerung zwischen den Bildern einzustellen, indem man das Attribut delay auf
den gewünschten Wert in Millisekunden setzt delay=100.
Um deine eigene Animation zu erstellen, musst du also nur eine Liste von Bildern erstellen.
In diesem Beispiel wird ein Boot im Boden des Displays versinken. Dazu haben wir eine Liste mit 6 Bootsbildern definiert:
from microbit import *
boat1 = Image("05050:"
"05050:"
"05050:"
"99999:"
"09990")
boat2 = Image("00000:"
"05050:"
"05050:"
"05050:"
"99999")
boat3 = Image("00000:"
"00000:"
"05050:"
"05050:"
"05050")
boat4 = Image("00000:"
"00000:"
"00000:"
"05050:"
"05050")
boat5 = Image("00000:"
"00000:"
"00000:"
"00000:"
"05050")
boat6 = Image("00000:"
"00000:"
"00000:"
"00000:"
"00000")
all_boats = [boat1, boat2, boat3, boat4, boat5, boat6] #Liste aller Boote
display.show(all_boats, delay=200)
Übungsaufgaben
Probiere einige der eingebauten Bilder aus, um zu sehen, wie sie aussehen.
Animiere die
Image.ALL_ARROWSListe. Wie vermeidest du eine ewige Schleife (Hinweis: das Gegenteil vonTrueistFalse). Kannst du die Geschwindigkeit der Animation verändern?Erstelle dein eigenes Bild. Versuche als nächstes, es aus- und wieder einzublenden?
Programmiere einen Würfel, der zufällig eines der 6 Würfelmuster anzeigt
Mache ein Sprite, benutze eine einzelne LED auf dem Display. Kannst du es springen lassen, wenn du eine Taste drückst?
Tipp
Auf der sehr empfehlenswerten Seite MultiWingSpan kann man ein kleines Tool herunterladen, mit dem man den Code für solche micro:bit Bilder und Animationen ganz einfach erstellen kann!