Lernpfad:Das micro:glow/3: Unterschied zwischen den Versionen

Zur Navigation springen Zur Suche springen
keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 20: Zeile 20:
         display.show(flash, delay=100, wait=False)
         display.show(flash, delay=100, wait=False)
</syntaxhighlight>
</syntaxhighlight>
== Python verstehen ==
{{Collapse:Start}}
=== 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:
[[Bild:Firefly.gif|center]]
Diese Animation besteht aus zehn einzelnen Bildern, die du dir [http://gif-explode.com/?explode=https://ngb.schule/hgwiki/images/f/fc/Firefly.gif 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?
<syntaxhighlight lang="python">
6666660006666660000666666
</syntaxhighlight>
In unserer Animation haben alle LEDs in einem Frame die gleiche Helligkeit. Die zehn Frames lassen sich also so darstellen:
<syntaxhighlight lang="python">
9999999999999999999999999
8888888888888888888888888
7777777777777777777777777
6666666666666666666666666
5555555555555555555555555
4444444444444444444444444
3333333333333333333333333
2222222222222222222222222
1111111111111111111111111
0000000000000000000000000
</syntaxhighlight>
Zurück zur Zeile 4 im Programm oben: Ein Bild des Displays wird im Programm durch <code>Image</code> repräsentiert. <code>Image()</code> erstellt ein Bild, bei dem die 25 Zahlen 0 sind. Mit <code>.invert()</code> 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 <code>for i in range(9, -1, -1)</code> wird nun von 9 bis 0 immer um eins heruntergezählt und der Wert in der Variablen <code>i</code> abgelegt. Dann wird etwas gerechnet: <code>Image().invert()*(i/9)</code> bedeutet, dass jede Zahl in unserem ersten Frame mit <code>(i/9)</code> multipliziert wird. Für jede Zahl rechnen wir also:
<syntaxhighlight lang="python">
i=9:  9 * (9/9) = 9
i=8:  9 * (8/9) = 8
i=7:  9 * (7/9) = 7
...
i=0:  9 * (0/9) = 0
</syntaxhighlight>
Damit erhalten wir die zehn Frames unserer Animation. Diese werden dann als Liste in der Variablen <code>flash</code> gespeichert und in Zeile 10 automatisch mit einer Verzögerung von 100 Millisekunden zwischen den Bildern abgespielt.
{{Collapse:End}}

Navigationsmenü