Morgenritual Lösung: Unterschied zwischen den Versionen

Aus microbit - Das Schulbuch
Zur Navigation springen Zur Suche springen
Leo.koeberl (Diskussion | Beiträge)
 
(7 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Grundsätzliche Überlegungen ==
== Grundsätzliche Überlegungen ==
* Die Voraussetzung für unser Programm ist die Erkenntnis, dass die Erde sich in 24 Stunden einmal um sich selbst dreht, also um 360 Grad.
* Das Projekt Schrittzähler ist eine gute Vorübung für dieses Projekt: versuche, am Anfang nur zu zählen, wie oft eine Bewegung erkannt worden ist und zeige den Zahlenwert an - ohne zweiten Zähler. Löse das eventuell zuerst!
* Daraus leitet sich die Rotation von 15 Grad pro Stunde und weiter die Drehung um 1 Grad alle 4 Minuten ab.
* Wenn das funktioniert, kann es mit einer Start-/Stopp-Logik mit der Taste A ausgebaut werden. Beachte: Einmal A gedrückt, soll das Zählen starten, ein zweites Mal drücken stoppt es wieder. Man sollte sich also merken, ob man gerade zählt oder nicht und bei einem Tastendruck zwischen zählen und nicht zählen umschalten. Dein Zähler von vorher, darf natürlich nur dann wirklich mitzählen, wenn gestartet worden ist! Also muss man, wenn ein Schütteln erkannt wurde zuerst prüfen, ob gerade gezählt wird und nur dann die [[Variable|Zählvariable]] erhöhen!
* Dann diesen Teil duplizieren und für Taste B abändern. Überlege genau, wann für Jakob und wann für Lea gestartet werden darf! Hier gibt es mehrere Möglichkeiten. Also zB sobald A oder B gedrückt wird, wird für diejenige oder denjenigen gezählt, egal ob schon eine Zählung läuft. Oder man muss zuerst stoppen und nur wenn eben keine Zählung aktuell läuft, startet das Zählen für den anderen oder die andere. Was sind die Vor- und Nachteile der beiden Varianten?
* Mache die Auswertung erst am Ende. Versuche als Vorarbeit zB einfach nach jedem Zählen die Werte für Lea und Jakob am Bildschirm auszugeben. Wenn das funktioniert, schreibe einen Code für "Wenn A+B gedrückt" und überlege dir genau, wann ein Ergebnis zählt, wann wer gewonnen hat und ob es vielleicht auch ein unentschieden geben kann!


== Tipps und Tricks ==
== Tipps und Tricks ==
; Was muss beim Starten des Programms festgelegt werden?[[Datei:Morgenritual - Startbild1.jpg|border|right|300px|Unser Startbildschirm]]
; Beim Starten des Programms, was müssen wir alles festlegen?[[Datei:Morgenritual - Start.png|border|right|300px|Unser Startbildschirm]]
: Wir weisen allen [[Variablen]] den Startwert 0 zu. <spoiler>Wir haben vier Variablen, die wir alle auf '''0''' setzen: RICHTUNG, STUNDE, MINUTE und SOMMERZEIT.
: Wir sollten alle [[Variablen]] auf einen passenden Startwert setzen. <spoiler>In unserer Beispielslösung haben wir vier Variablen, die wir alle auf '''0''' bzw. '''falsch''' setzen. Das sind die Zähler für Lea und Jakob und "Merker" (Hilfsvariablen), ob wir gerade für Jakob oder für Lea zählen. Beide haben zu Beginn Null Bewegungen und wir zählen für keinen der beiden, erst ab einem Tastendruck.</spoiler>
: ALs Startbild wird eine Sonnenuhr gezeigt, damit man weiß, dass das Programm läuft. Du könntst aber auch ein anderes Startbild gestalten!
: Außerdem könnten wir ein Startbild zeigen, damit man weiß, dass das Programm läuft. Überlege dir, wie dein eigener Startbildschirm aussehen soll!


; Was soll passieren, wenn zB die Taste A gedrückt wird?
; Was soll passieren, wenn zB die Taste A gedrückt wird?
: Zur Erinnerung: Jakob will ja, dass bei A für ihn gezählt wird!
: Zur Erinnerung: Jakob will ja, dass bei A für ihn gezählt wird!
: Zur Sicherheit müssen wir aufpassen, ob nicht gerade für Lea gezählt wird. Dafür brauchen wir den Merker für gerade für Lea gezählt wird.
: Zur Sicherheit müssen wir aufpassen, ob nicht gerade für Lea gezählt wird. Dafür brauchen wir den Merker ob gerade für Lea gezählt wird.
: OK, wir zählen nicht für Lea. Nun kann das Drücken von A zwei Bedeutungen haben. Weißt du welche? <spoiler>Wenn das Zählen noch nicht läuft, soll gestartet werden. Wenn wir schon zählen, soll gestoppt werden.</spoiler>
: OK, wir zählen nicht für Lea. Nun kann das Drücken von A zwei Bedeutungen haben. Weißt du welche? <spoiler>Wenn das Zählen noch nicht läuft, soll gestartet werden. Wenn wir schon zählen, soll gestoppt werden.</spoiler>
: Wenn wir schon für Jakob zählen, hören wir damit auf und merken uns das.
: Wenn wir schon für Jakob zählen, hören wir damit auf und merken uns das.
Zeile 27: Zeile 29:
: Sonst, hat vielleicht Lea mehr geputzt als Jakob? Auch hier haben wir eine Gewinnerin!
: Sonst, hat vielleicht Lea mehr geputzt als Jakob? Auch hier haben wir eine Gewinnerin!
: Sonst? Ja, was könnte noch sein? <spoiler>Beide haben gleich viel geputzt: unentschieden!</spoiler>
: Sonst? Ja, was könnte noch sein? <spoiler>Beide haben gleich viel geputzt: unentschieden!</spoiler>
: Wenn das Ergebnis gezeigt wurde, könnte es sein, dass die beiden vielleicht nochmal probieren wollen. Was müssen wir dafür noch berücksichtigen? <spoiler>Dass alle Variablen, wie beim Programmstart wieder zurückgesetzt werden, sonst würde einfach bei der bisherigen Anzahl von Schrubbungen weitergezählt werden! Außerdem könnten wir auch wieder unsere Startgrafik anzeigen</spoiler>
: Wenn das Ergebnis gezeigt wurde, könnte es sein, dass die beiden vielleicht nochmal probieren wollen. Was müssen wir dafür noch berücksichtigen? <spoiler>Dass alle Variablen, wie beim Programmstart wieder zurückgesetzt werden, sonst würde einfach bei der bisherigen Anzahl von Schrubbungen weitergezählt werden! Außerdem könnten wir auch wieder unsere Startgrafik anzeigen. Für die Expertinnen und Experten: nachdem wir zweimal Variablen zurücksetzen und die Startgrafik anzeigen (beim ersten Start und dann immer nach dem Ende eines Durchgangs) könnten wir das auch gleich in eine eigene Funktion auslagern ...</spoiler>


== Flussdiagramme ==
== Flussdiagramme ==
Zeile 36: Zeile 38:
: Eine mögliche Lösung für den Start? <spoiler text="Lösung">[[Datei:Morgenritual - Beim Start.png|border|350px|Was passieren könnte, wenn das Programm startet]]</spoiler>
: Eine mögliche Lösung für den Start? <spoiler text="Lösung">[[Datei:Morgenritual - Beim Start.png|border|350px|Was passieren könnte, wenn das Programm startet]]</spoiler>
; Wenn die Taste A gedrückt wird, können verschiedene Dinge passieren, je nachdem was das Programm gerade macht!
; Wenn die Taste A gedrückt wird, können verschiedene Dinge passieren, je nachdem was das Programm gerade macht!
: Wenn wir auch einige Sicherheitsabfragen einbauen, kann eine Lösung so aussehen: <spoiler text="Lösung">[[Datei:Morgenritual - A gedrückt.png|border|500px|Was passieren könnte, wenn A gedrückt wird]]</spoiler>
: Wenn wir auch einige Sicherheitsabfragen einbauen, kann eine Lösung so aussehen: <spoiler text="Lösung">[[Datei:Morgenritual - A gedrueckt.png|border|500px|Was passieren könnte, wenn A gedrückt wird]]</spoiler>
; Wenn die Taste B gedrückt wird, sollte etwas ähnliches geschehen wie beim Drücken von A, nur mit vertauschten Rollen!
; Wenn die Taste B gedrückt wird, sollte etwas ähnliches geschehen wie beim Drücken von A, nur mit vertauschten Rollen!
: Das sieht zB so aus: <spoiler text="Lösung">[[Datei:Morgenritual - B gedrückt.png|border|500px|Was passieren könnte, wenn B gedrückt wird]]</spoiler>
: Das sieht zB so aus: <spoiler text="Lösung">[[Datei:Morgenritual - B gedrueckt.png|border|500px|Was passieren könnte, wenn B gedrückt wird]]</spoiler>
; Wenn nun ein Schrubben (Schütteln) erkannt wird ...
; Wenn nun ein Schrubben (Schütteln) erkannt wird ...
: ... teilen wir das wie folgt richtig zu: <spoiler text="Lösung">[[Datei:Morgenritual - Wenn geschüttelt.png|border|500px|Was passieren könnte, wenn das Programm startet]]</spoiler>
: ... teilen wir das wie folgt richtig zu: <spoiler text="Lösung">[[Datei:Morgenritual - Wenn geschuettelt.png|border|500px|Was passieren könnte, wenn das Programm startet]]</spoiler>
; Wenn die Tasten A und B gleichzeitig gedrückt werden, soll ja angezeigt werden, wer gewonnen hat. Was müssen wir dazu (der Reihe nach) wissen?
; Wenn die Tasten A und B gleichzeitig gedrückt werden, soll ja angezeigt werden, wer gewonnen hat. Was müssen wir dazu (der Reihe nach) wissen?
: Der Programmteil könnte zB so aussehen: <spoiler text="Lösung">[[Datei:Morgenritual - AB gedrückt.png|border|800px|Was passieren könnte, wenn die Tasten A und B gleichzeitig gedrückt werden]]</spoiler>
: Der Programmteil könnte zB so aussehen: <spoiler text="Lösung">[[Datei:Morgenritual - AB gedrueckt.png|border|800px|Was passieren könnte, wenn die Tasten A und B gleichzeitig gedrückt werden]]</spoiler>

Aktuelle Version vom 18. November 2021, 16:26 Uhr

Grundsätzliche Überlegungen

  • Das Projekt Schrittzähler ist eine gute Vorübung für dieses Projekt: versuche, am Anfang nur zu zählen, wie oft eine Bewegung erkannt worden ist und zeige den Zahlenwert an - ohne zweiten Zähler. Löse das eventuell zuerst!
  • Wenn das funktioniert, kann es mit einer Start-/Stopp-Logik mit der Taste A ausgebaut werden. Beachte: Einmal A gedrückt, soll das Zählen starten, ein zweites Mal drücken stoppt es wieder. Man sollte sich also merken, ob man gerade zählt oder nicht und bei einem Tastendruck zwischen zählen und nicht zählen umschalten. Dein Zähler von vorher, darf natürlich nur dann wirklich mitzählen, wenn gestartet worden ist! Also muss man, wenn ein Schütteln erkannt wurde zuerst prüfen, ob gerade gezählt wird und nur dann die Zählvariable erhöhen!
  • Dann diesen Teil duplizieren und für Taste B abändern. Überlege genau, wann für Jakob und wann für Lea gestartet werden darf! Hier gibt es mehrere Möglichkeiten. Also zB sobald A oder B gedrückt wird, wird für diejenige oder denjenigen gezählt, egal ob schon eine Zählung läuft. Oder man muss zuerst stoppen und nur wenn eben keine Zählung aktuell läuft, startet das Zählen für den anderen oder die andere. Was sind die Vor- und Nachteile der beiden Varianten?
  • Mache die Auswertung erst am Ende. Versuche als Vorarbeit zB einfach nach jedem Zählen die Werte für Lea und Jakob am Bildschirm auszugeben. Wenn das funktioniert, schreibe einen Code für "Wenn A+B gedrückt" und überlege dir genau, wann ein Ergebnis zählt, wann wer gewonnen hat und ob es vielleicht auch ein unentschieden geben kann!

Tipps und Tricks

Beim Starten des Programms, was müssen wir alles festlegen?
Unser Startbildschirm
Unser Startbildschirm
Wir sollten alle Variablen auf einen passenden Startwert setzen. <spoiler>In unserer Beispielslösung haben wir vier Variablen, die wir alle auf 0 bzw. falsch setzen. Das sind die Zähler für Lea und Jakob und "Merker" (Hilfsvariablen), ob wir gerade für Jakob oder für Lea zählen. Beide haben zu Beginn Null Bewegungen und wir zählen für keinen der beiden, erst ab einem Tastendruck.</spoiler>
Außerdem könnten wir ein Startbild zeigen, damit man weiß, dass das Programm läuft. Überlege dir, wie dein eigener Startbildschirm aussehen soll!
Was soll passieren, wenn zB die Taste A gedrückt wird?
Zur Erinnerung: Jakob will ja, dass bei A für ihn gezählt wird!
Zur Sicherheit müssen wir aufpassen, ob nicht gerade für Lea gezählt wird. Dafür brauchen wir den Merker ob gerade für Lea gezählt wird.
OK, wir zählen nicht für Lea. Nun kann das Drücken von A zwei Bedeutungen haben. Weißt du welche? <spoiler>Wenn das Zählen noch nicht läuft, soll gestartet werden. Wenn wir schon zählen, soll gestoppt werden.</spoiler>
Wenn wir schon für Jakob zählen, hören wir damit auf und merken uns das.
Wenn nicht, merken wir uns, dass ab jetzt für Jakob gezählt wird!
(Beim Drücken von B passiert eigentlich das gleiche. Es sind nur die Rollen vertauscht. Formuliere es richtig um?)
Wenn nun geputzt wird, und der Micro:bit merkt, dass er dabei geschüttelt wird ...
Was müssen wir prüfen, bevor wir einen Putzzähler erhöhen können? <spoiler>Richtig: für wen wir eigentlich zählen, muss mit einer Abfrage unterschieden werden</spoiler>
Wenn wir für Jakob zählen, erhöhen wir seinen Zähler um eins.
Sonst, wenn wir für Lea zählen, erhöhen wir ihren Zähler.
Und falls wir für niemanden zählen erhöhen wir gar nichts ... :)
Wenn die Tasten A und B gleichzeitig gedrückt werden, soll ja angezeigt werden, wer gewonnen hat. Was müssen wir dazu (der Reihe nach) wissen?
Ist überhaupt schon etwas gezählt worden? Für beide? Wie können wir das überprüfen?
Wenn ja, hat Jakob mehr geputzt als Lea? Dann haben wir einen Gewinner und wir sollten das Ergebnis verkünden!
Sonst, hat vielleicht Lea mehr geputzt als Jakob? Auch hier haben wir eine Gewinnerin!
Sonst? Ja, was könnte noch sein? <spoiler>Beide haben gleich viel geputzt: unentschieden!</spoiler>
Wenn das Ergebnis gezeigt wurde, könnte es sein, dass die beiden vielleicht nochmal probieren wollen. Was müssen wir dafür noch berücksichtigen? <spoiler>Dass alle Variablen, wie beim Programmstart wieder zurückgesetzt werden, sonst würde einfach bei der bisherigen Anzahl von Schrubbungen weitergezählt werden! Außerdem könnten wir auch wieder unsere Startgrafik anzeigen. Für die Expertinnen und Experten: nachdem wir zweimal Variablen zurücksetzen und die Startgrafik anzeigen (beim ersten Start und dann immer nach dem Ende eines Durchgangs) könnten wir das auch gleich in eine eigene Funktion auslagern ...</spoiler>

Flussdiagramme

Könnten bei Bedarf auch noch hier als Zwischenteil eingebaut werden.

Komplettlösungen

Beim Starten des Programms, was müssen wir alles festlegen?
Eine mögliche Lösung für den Start? <spoiler text="Lösung">Was passieren könnte, wenn das Programm startet</spoiler>
Wenn die Taste A gedrückt wird, können verschiedene Dinge passieren, je nachdem was das Programm gerade macht!
Wenn wir auch einige Sicherheitsabfragen einbauen, kann eine Lösung so aussehen: <spoiler text="Lösung">Was passieren könnte, wenn A gedrückt wird</spoiler>
Wenn die Taste B gedrückt wird, sollte etwas ähnliches geschehen wie beim Drücken von A, nur mit vertauschten Rollen!
Das sieht zB so aus: <spoiler text="Lösung">Was passieren könnte, wenn B gedrückt wird</spoiler>
Wenn nun ein Schrubben (Schütteln) erkannt wird ...
... teilen wir das wie folgt richtig zu: <spoiler text="Lösung">Was passieren könnte, wenn das Programm startet</spoiler>
Wenn die Tasten A und B gleichzeitig gedrückt werden, soll ja angezeigt werden, wer gewonnen hat. Was müssen wir dazu (der Reihe nach) wissen?
Der Programmteil könnte zB so aussehen: <spoiler text="Lösung">Was passieren könnte, wenn die Tasten A und B gleichzeitig gedrückt werden</spoiler>