Calliope mini - Spaß durch Programmieren

Ampelschaltung (2)

Ziel: Fällt die Steuerampel aus, muss die zweite Ampel sofort in den Modus Gelb-Blinken wechseln. Ansonsten könnte es zu Umfällen kommen.

Die gesteuerte Ampel erhält von der Steuerampel per Bluetooth Informationen über den Zustand. Wenn sie keine Zustandsinformationen mehr erhält, muss sie in den Blinke-Modus schalten.
Problem: Die Steuerampel vertrödelt die meiste Zeit mit Warten. Wenn sie während dieser Zeit ausfällt, bekommt die gesteuerte Ampel nicht mit. Deshalb muss das Programm so geändert werden, dass der Warte-Befehl entfällt. Das lässt sich ganz gut über den Zeitgeber realisieren.

Senderampel (Master)

Es werden sechs Variable benötigt.

  • startzeit: Wenn die Ampel auf Rot schaltet, wird dort der momentane Wert des Zeitgebers reingeschrieben.
  • aktuelle_zeit: Berechnet sich aus der Zeit, die der Zeitgeber enthält und der startzeit. Es ist praktisch die Zeit, die seit dem Start mit Rot vergangen ist.
  • gruen_zeit: Zeit der Grünphase in Millisekunden
  • rot_zeit: Zeit der Rotphase in Millisekunden
  • wechsel_zeit: Zeit der Gelb- oder Rotgelbphase in Millisekunden
  • sendung: Enthält die Zeichenkette, die laufend gesendet wird. Zu Beginn ist sie leer.

Für die Entscheidungen nutzt man diesen Block:

Calliope mini-Ampel

Die zusätzlichen sonst wenn Entscheidungen erhält man über das Plus im Kopf des Blockes.

Zu Beginn der unentlichen Schleife ist die aktuelle_zeit kleiner als die rot_zeit. Damit liefern alle Entscheidungen ein Nein und die Ampel schaltet auf Rot. Es wird eine 1 gesendet.

Irgendwann ist die aktuelle_zeit größer als die rot_zeit, aber noch kleiner als wechsel_zeit+rot_zeit. Dann liefert die letze Entscheidung ein Ja und die Ampel schaltet auf Rot-Gelb. usw.

Da kein Warten verwendet wird, sendet die Ampel praktisch ununterbrochen die Steuerinformationen für die zweite Ampel.

Empfängerampel (Slave)

Die Empfängerampel arbeitet ähnlich wie der Empfänger aus der Ampel(1). Der Entscheidungsblock bekommt aber noch einen default-Teil, der eine Funktion gelb_blinken aufruft. Diese Funktion lässt die gelbe Ampel blinken und wird ebenfalls über den Zeitgeber realisiert (Blinken ohne Warten).

Wenn jetzt alles richtig funktioniert, läuft die Empfängerampel synchron zur Senderampel. Fällt die Senderampel aus, schaltet die Empängerampel sofort in den Blinkmodus.

zurück