Calliope mini - Spaß durch Programmieren

Entwicklungsumgebungen

CountDown ohne Warten

Ziel: Der CountDown läuft ohne einen Wartebefehl ab. Dazu wird der Zeitgeber verwendet.

Takt ohne Warten

In der unendlichen Schleife wird in jeder Runde der Inhalt einer Variablen mit dem Zeitgeber verglichen. Ist der Inhalt des Zeitgebers größer als der Inhalt der Variablen, wird die Variable neu gesetzt und eine Funktion für den Countdown aufgerufen.

Zuerst wird diese Zeitfunktion realisiert und zur Kontrolle nur die LED ein- und ausgeschaltet. Setzt man die Wartezeit z.B. auf 1000, blinkt die LED im Sekundentakt.

Eine Zeile löschen

Zu Beginn des Programms wird der Bildschirm wieder komplett eingeschaltet. In der Funktion wird die linke obere LED nach der Wartezeit ausgeschaltet und die Spalte um 1 erhöht. Das darf natürlich nur erfolgen, wenn die Spalte kleiner als 5 ist.

Calliope mini

Bildschirm löschen

Im nächsten Schritt wird der gesamte Bildschirm Zeile für Zeile gelöscht. Bei jedem Funktionsaufruf wird die Zeilennummer überprüft und die beiden Variablen für Zeile und Spalte geändert.

Gleichzeitig wird eine weiter Variable zaehler erhöht, um zu erkennen, wenn der Bildschirm komplett gelöscht ist. Das würde auch ohne zusätzliche Variable aus der Kombination von Zeile und Spalte gehen. Ist der Bildschirm gelöscht, wird die boolsche Variable countdown_an auf falsch gesetzt. Sie wird im Hauptprogram verwendet, um im Zusammenspiel mit der Zeitvariablen die Countdown-Funktion aufzurufen oder nicht.

Die LED wird beim Start des Programms auf Rot geschaltet und wird zum Ende des Bildschirmlöschens auf Grün gesetzt. Damit kann man kontrollieren, ob alles ordentlich funktioniert.

Calliope mini

Was bringt das nun?

Beim CountDown mit den Wartebefehlen lässt sich während der Wartezeiten der Calliope mini nicht bedienen, er reagiert z.B. nicht auf den Druck einer Taste. Damit sind Wartebefehle für die Programmierung von Spielen ungeeignet. Durch den Einsatz des Zeitgebers können mit den beiden Tasten Aktionen durchgeführt werden.

Calliope mini

Takt ohne Warten, eine Zeile löschen

In Make Code lässt sich das Warten einfacher vermeiden als im OpenRobertaLap. Es gibt eine Funktion, die im Hintergrund nach einer eingestellten Zeit den Code ausführt.

Bildschirm löschen

In der Funktion, die alle 0,5 s aufgerufen wird, werden die Zeile und die Spalte so geändert, dass LED für LED nacheinander ausgeschaltet werden.

Calliope mini

Überlauf vermeiden

Bisher wird noch nicht überprüft, ob die Zeilenvariable einen größeren Wert als 4 erreicht. Nachdem alle LED gelöscht sind, dürfen die Variablen ja nicht weiter erhöht werden. Das würde zwar den CountDown nicht stören, aber die Variablen laufen unkontrolliert weiter hoch. Deshalb wird der Code zum Zählen nur dann ausgeführt, wenn die Zeilenvariable kleiner als 5 ist.

Calliope mini

Variable Wartezeiten

Auch wenn das Vermeiden von Wartezeiten in Make Code sehr einfach zu realisieren ist, hat es doch einen Makel: Die Zeit zwischen zwei Ereignissen lässt sich nicht verändern. Gibt man als Zeit zwischen zwei Aufrufen 500 ms ein, bliebt diese Zeit unveränderlich erhalten. Der gezeigte Programmteil ändert bei jedem Aufruf die Wartezeit um 100. Das funktioniert aber nicht, der Aufruf erfolgt stur alle 200 ms.

Calliope mini

In der unendlichen Schleife wird in jeder Runde der Inhalt einer Variablen mit dem Zeitgeber verglichen. Ist der Inhalt des Zeitgebers größer als der Inhalt der Variablen, wird die Variable neu gesetzt und eine Funktion für den Countdown aufgerufen.

Es ist jetzt möglich, die Wartezeit bei jedem Schritt kleiner zu machen, was beim Ablaufen des Programmes deutlich zu erkenn ist.

Calliope mini

Die Funktion schritt prüft zuerst, ob überhaupt noch LED eingeschaltet sind. Dazu wird die Variable zaehler verwendet, die bei jedem Schritt um eins erhöht wird. Hat sie den Wert 25 erreicht, wird der Programmteil zum Ausschalten der LEDs nicht mehr durchgeführt.

Wenn jetzt alles richtig funktioniert, wird jede Zeile schneller als die Zeile darüber gelöscht.

Calliope mini

Es geht noch einfacher

Der Bildschirm besteht aus 25 LED, die man von 0 bis 24 durchnummerieren kann. Damit ist zum Ansprechen jeder einzelnen LED nur eine Schleife notwendig, die von 0 bis 24 durchläuft.

Man kann nun aus dem Schleifenzähler i die Spalten- und Zeilennummer jeder einzelnen LED berechnen:

  • Die Spaltennummer erhält man, wenn der Zähler durch 5 geteilt wird und dann der Rest der ganzzahligen Division genutzt wird. Ist der Zähler z.B. 11, ergibt die Teilung durch 5 eine 2. Der Rest ist dann 1 und das ist genau die Spaltennummer der LED mit der Nummer 11.
  • Die Zeilennummer erhält man, wenn man den Zähler durch 5 teilt und das Ergebnis abrundet. Für die 11 ergibt das die Zeile 2, für die LED 17 entsprechend die 3.
Calliope mini-Bildschirm

zurück