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.

../_images/happy.png

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.

../_images/quadratanimation.gif

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_ARROWS Liste. Wie vermeidest du eine ewige Schleife (Hinweis: das Gegenteil von True ist False). 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!

../_images/anim.png