Mit den 25 LEDs auf dem Calliope lässt sich ein prima Zahlenschloss bauen.
Das Programm soll die Codeeingabe mit den 2 Tastern ermöglichen. Taster A schaltet die Spalten (=Stelle im Code) durch, mit Taster B soll der Wert der aktuellen Codestelle (zwischen 0 und 4) eingestellt werden.
Am Anfang steht der CodeZunächst legen wir die richtige Zahlenkombination als "Zeichenfolge" fest, zeichnen den ersten Pixel links oben und setzen die LED-Farbe auf Rot ("Schloss ist zu"). Die Geschwindigkeit setzen wir auf einen hohen Wert, damit die Piepstöne schön kurz sind:
Nun sorgen wir dafür, dass beim betätigen von Taster A die gerade einzustellende Spalte durchgeschaltet wird. Zusätzlich ändern wir den Wert der gerade bearbeiteten Spalte auf 0, damit wir bei der Eingabe der Werte immer oben anfangen:
Wenn der Platzhalter "bearbeite_spalte" größer als 4 ist, müssen wir ihn auf 0 zurücksetzen, denn wir haben nur 5 Spalten (0,1,2,3,4):
Zuletzt schalten wir alle LEDs in der Spalte aus, in die wir gerade gewechselt sind. Danach lassen wir den aktuellen Spaltenwert in dieser Spalte noch 3x kurz blinken:
Bei jeder Betätigung soll der Wert um 1 erhöht werden. Auch hier fangen wir wieder bei 0 an, wenn der Wert größer als 4 ist. Vor dem erhöhen schalten wir die LED des vorherigen Wertes aus, nach dem erhöhen die LED mit dem neu eingestellten Wert an:
Jetzt nur noch überprüfen ob der Code richtig ist und dann die LED grün machen!
Immer wenn ein Programmierer diesen Satz sagt, hat er ungefähr 20% der Aufgabe erledigt – jetzt wird es kompliziert!
Um zu überprüfen ob der Code richtig eingegeben wurde, gehen wir die Spalten durch und sehen nach, ob der eingestellte Wert dem Wert in der Lösungs-Zeichenfolge (die wir beim Programmstart gesetzt haben) an der jeweiligen Stelle entspricht.
Wir setzen also den Zähler "code_richtig" auf 0, und prüfen in einer Schleife alle Spalten. Hierzu setzen wir uns zuerst einen Platzhalter in dem wir die Zahl aus der Lösungszeichenfolge für die aktuelle Spalte extrahieren. Wir benutzen den "Zeichen an Position"-Block um das Zeichen an der Spaltenposition zu erhalten. Da dies ein Zeichen ist, und wir gleich mit einer Zahl vergleichen wollen, muss dieses Zeichen in eine Zahl konvertiert werden. Dies erledigt der Block "parse to integer":
Jetzt gehen wir in der aktuellen Spalte alle Zeilen durch. Wenn die LED in einer Zeile an ist (Punkt x y - Block ist "wahr"), schauen wir ob die Zeile mit der im vorherigen Schritt bestimmten "lösung der spalte" übereinstimmt, und zählen den code_richtig-Platzhalter um 1 hoch.
Jetzt müssen wir nur noch (diesmal wirklich!) prüfen, ob alle Spalten richtig eingegeben wurden. Dies ist der Fall wenn der code_richtig Platzhalter den Wert 5 hat! Wir signalisieren die richtige Aufgabe indem wir die Farb-LED auf Grün setzen. Im ansonsten-Zweig des Vergleichs setzen wir Rot. Dies passiert sobald durch die Taster die Code-Eingabe verändert wird und nicht mehr der Lösung entspricht.
Statt dem setzen der LED-Farbe könnte man jetzt über die PINs etwas ansteuern, was etwas "echtes" z.B. mit einem Servo auf- und zuschließt.
Comments