Lernpfad:Das micro:glow/3

Aus Informatik-Box
Zur Navigation springen Zur Suche springen

Den micro:bit zum Glühen bringen

Nun sollst du den micro:glow zunächst wie ein Glühwürmchen zum Leuchten bringen.

MuEditor.png
Arbeitsauftrag

Übertrage das Programm unten in den Mu-Editor. Achte dabei unbedingt auf die korrekten Einrückungen! Schließ anschließend deinen micro:bit per USB an den Computer an und übertrage das Programm mit einem Klick auf den Aufspielen Knopf oben.

Beobachte, was passiert, wenn du den A-Knopf betätigst.

from microbit import * 

# Erstellen der "glow" Animation
flash = [Image().invert()*(i/9) for i in range(9, -1, -1)]

while True:
    # Knopf A löst das Glühen aus
    if button_a.was_pressed():
        # Animation abspielen
        display.show(flash, delay=100, wait=False)
Icon Info.png
Du kannst das Programm am schnellsten per Kopieren und Einfügen in den Editor übernehmen. Du musst aber aufpassen: Wie du weißt, sind die Einrückungen (Leer- und Tabulatorzeichen) in Python Teil des Programms. Beim Kopieren kann es manchmal zu Problemen mit diesen unsichtbaren Zeichen kommen. Wenn Probleme auftreten, solltest du die Befehle von Hand neu einrücken und alle Leerzeichen sorgfältig kontrollieren. Wie dir der Mu-Editor hilft, dein Programm zu prüfen erfährst du im Lernpfad:Einführung in den micro:bit.

Python verstehen

Animationen kurz erklärt

In Zeile 4 wird die Animation für das Leuchten des Glühwürmchens erstellt. Eine Animation besteht aus mehreren Bildern (Frames), die schnell hintereinander abgespielt werden. In diesem Lernpfad sind dir schon einige Animationen begegnet. Zum Beispiel diese:

Firefly.gif

Diese Animation besteht aus zehn einzelnen Bildern, die du dir hier anzeigen lassen kannst.

Die Animation, die den micro:glow zum Leuchten bringt, besteht auch aus 10 Frames, wobei die Anzeige des micro:bit keine Farben darstellen kann, sondern nur verschiedene Helligkeitsstufen: 0 bis 9. Die Animation startet mit voller Stärke (9) und reduziert in jedem Frame die Helligkeit um eins. Im zehnten Frame ist sie dann also wieder auf 0.

Python-Listen in Kurzform

Das Display des micro:bit besteht aus 5x5 LEDs. Ein Bild, das angezeigt werden soll, kann aus 25 Zahlen von 0 bis 9 bestehen. Jede Zahl gibt die Helligkeit einer LED an. Die erste Zahl ist die erste LED in der ersten Zeile, die zweite die zweite in der ersten Zeile, die sechste die erste in der zweiten Zeile, und so weiter.

Zum Beispiel kann wie folgt die Zahl 9 mit Helligkeit 6 dargestellt werden. Siehst du, warum?

6666660006666660000666666

In unserer Animation haben alle LEDs in einem Frame die gleiche Helligkeit. Die zehn Frames lassen sich also so darstellen:

9999999999999999999999999
8888888888888888888888888
7777777777777777777777777
6666666666666666666666666
5555555555555555555555555
4444444444444444444444444
3333333333333333333333333
2222222222222222222222222
1111111111111111111111111
0000000000000000000000000

Zurück zur Zeile 4 im Programm oben: Ein Bild des Displays wird im Programm durch Image repräsentiert. Image() erstellt ein Bild, bei dem die 25 Zahlen 0 sind. Mit .invert() werden die Zahlen "invertiert", das heißt auf die "Gegenzahl" gesetzt. In diesem Fall ist das der hellste Wert: 9. Wir erhalten also das erste Frame unserer Animation.

Mit for i in range(9, -1, -1) wird nun von 9 bis 0 immer um eins heruntergezählt und der Wert in der Variablen i abgelegt. Dann wird etwas gerechnet: Image().invert()*(i/9) bedeutet, dass jede Zahl in unserem ersten Frame mit (i/9) multipliziert wird. Für jede Zahl rechnen wir also:

i=9:  9 * (9/9) = 9
i=8:  9 * (8/9) = 8
i=7:  9 * (7/9) = 7
...
i=0:  9 * (0/9) = 0

Damit erhalten wir die zehn Frames unserer Animation. Diese werden dann als Liste in der Variablen flash gespeichert und in Zeile 10 automatisch mit einer Verzögerung von 100 Millisekunden zwischen den Bildern abgespielt.

Die Python-Art

Listen sind ein sehr mächtiges Werkzeug und spielen in vielen Python-Programmen eine wichtige Rolle. Sie werden durch eckige Klammern ([]) eingegeben. Zum Beispiel eine Liste der Zahlen von 0 bis 9: zahlenliste = [0,1,2,3,4,5,6,7,8,9]

Im Programm oben wird die Liste der Frames automatisch erstellt. Wir hätten aber auch alle Frames von Hand in eine Liste schreiben können:

flash = [
    Image("9999999999999999999999999"),
    Image("8888888888888888888888888"),
    Image("7777777777777777777777777"),
    Image("6666666666666666666666666"),
    Image("5555555555555555555555555"),
    Image("4444444444444444444444444"),
    Image("3333333333333333333333333"),
    Image("2222222222222222222222222"),
    Image("1111111111111111111111111"),
    Image("0000000000000000000000000")
]