Challenge 5: Stoppuhr

Challenge

Ziel ist es, den Micro:bit in eine einfache Stoppuhr zu verwandeln. Durch das Drücken eines Knopfes startet die Zeitmessung. Während der Zeitmessung soll eine sich immer wiederholende Bildanimation eines sich im Uhrzeigersinn drehenden Uhrzeigers abgespielt werden. Durch erneutes Drücken des Knopfes soll die Animation gestoppt werden und die Zeit sowohl berechnet als auch in Sekunden ausgegeben werden.

Tipps:

  • Unter „Input – …“ gibt es einen Block, der die vergangene Zeit seit Einschalten des Micro:bits ausgibt.
  • Die Animation besteht aus zwölf einzelnen Bildern, die man mit einer Endlosschleife und einer Funktion während der Messzeit abspielen lassen kann. Dazu kann man in einer Variable den aktuellen Durchlaufstand speichern, das entsprechende Bild anzeigen und diese Variable erhöhen. Beim letzten Bild setzt man diese Variable wieder auf den Anfangswert 0.

Makecode

Programmierfunktion

  • Variablen 
  • If-Abfrage
  • Animationen abspielen
  • Events abfragen

Spiellogik

Wenn der micro:bit startet, sollen zuerst die Variablen definiert und initialisiert werden.

  • Eine Variable, um die gemessene Zeit zu speichern, zu Beginn steht sie auf 0.
  • Eine Start-Variable, um mehrmaliges Starten/Stoppen zu verhindern.
  • Eine Variable, welchen den aktuellen Stand der Animation speichert, zu Beginn steht sie ebenfalls auf 0.

Die Bedienung erfolgt ausschließlich über die „A“ Taste. Bei erstmaligen Drücken steht die Start-Variable auf False. Durch das negieren dieser soll der „True“-Fall ausgeführt werden. Dort wird die Zeit-Variable auf die vergangene Zeit seit Einschalten des micro:bits gesetzt und dann die Start-Variable auf „True“, um die Animation zu starten.

In einer Endlosschleife wird zuerst abgefragt ob die Start-Variable auf „True“ steht. Dort wird dann die Funktion für das Anzeigen des aktuellen Animationsstandes aufgerufen. In dieser Funktion braucht man insgesamt 12 If-Abfragen. Jede soll einen Stand der Animation anzeigen,  dafür wird entsprechend ein Bild angezeigt. Die Bilder sollen einen Uhrzeiger darstellen, welcher im Uhrzeigersinn tickt. Jedes Bild zeigt einen anderen Stand und sie alle sollten logisch aufeinander folgen. Jede If-Abfrage fragt inkrementell die gespeicherte Zahl in der Animations-Stand-Variable ab, beginnend bei 0 und zum Schluss mit 11. Bei der letzten Abfrage wird diese Variable auf -1 gesetzt, damit die Animation wieder von vorne beginnen kann. Damit die Animation jetzt aber auch abgespielt wird, muss in der Endlosschleife unter den Funktionsaufruf die Variable um 1 erhöht werden. Somit wird also immer ein Bild angezeigt, die Variable erhöht und im nächsten Schleifendurchlauf das nächste Bild angezeigt, und so weiter. Wenn am Ende die Variable auf -1 gesetzt wird, wird sie gleich danach erhöht und steht auf 0. Im darauffolgenden Schleifendurchlauf beginnt die Animation dann von vorne mit dem ersten Bild.

Drückt man erneut auf die „A“ Taste, um die Messung zu stoppen, steht die Start-Variable auf „True“ und durch das Negieren wird dann der Else-Fall ausgeführt. Dort soll zuerst die Start-Variable auf „False“ gesetzt werden, um die Animation zu stoppen. Als nächstes soll die vergangene Zeit ausgegeben werden. Dazu wird nimmt man erneut die seit Einschalten des micro:bit vergangene Zeit und zieht von ihr die am Anfang erfasste Zeit in der Zeit-Variable ab und bekommt so die gemessene Zeit in Millisekunden. Diesen Wert kann man dann noch durch 1000 dividieren, um ihn in Sekunden zu bekommen. Die ganze Berechnung kann innerhalb des „show string“-Blocks geschehen und muss nicht zwischengespeichert werden. Zuletzt soll noch kurz pausiert werden, damit man den Wert auch vernünftig lesen kann und dann das Programm zurückgesetzt werden.

Wir wünschen viel Freude mit der heutigen Challenge! Die Auflösung gibt es morgen hier auf dem Blog.

Challenge Master

Ich bin der Challenge Master. Hinter mir verbergen sich die Auszubildenden von Proact Deutschland. Gemeinsam füllen wir diesen Blog mit verschiedenen Projekten, um euch das Coden beizubringen.

 
Kommentare

Noch keine Kommentare vorhanden.

Hinterlassen Sie einen Kommentar