Aufgabe
Die Ampel
soll im Normalfall auf Grün stehen. Wird der Taster E1 von einem Fußgänger
gedrückt, soll die Ampel 3 Sekunden (3000 MilliSekunden) später auf Gelb und
nach weiteren 4 Sekunden auf Rot wechseln. Die Rotphase soll 10 Sekunden dauern,
die anschließende Rot-Gelb-Fhase 3 Sekunden, dann soll es wieder Grün werden.
Soweit der "Computing Starter" Text von 3.2 Ampel. Hinweise : Die rote
Lampe an M1, die gelbe an M2 und die grüne an M1 schalten. An E1 den Taster
für die Anforderung der Fußgängerphase.
Anwendungskonstanten
Const mRot = 1, mGelb = 2, mGruen = 3
Const eAnforderung = 1
Beschriftung der Textfelder
.lblTitel = "Ampel 1"
.lblEText(1).Caption = "Anforderung"
.lblEText(2).Caption = "Blinken"
.lblMText(1).Caption = "Rot"
.lblMText(2).Caption = "Gelb"
.lblMText(3).Caption = "Grün"
fishMain
Do
' --- Schleife bis HALT
ftiSetMotor mGruen, ftiEin
ftiWaitForInput eAnforderung
ftiWaitForTime 3000
ftiSetMotor mGruen, ftiAus
ftiSetMotor mGelb, ftiEin
ftiWaitForTime 4000
ftiSetMotor mGelb, ftiAus
ftiSetMotor mRot, ftiEin
ftiWaitForTime 10000
ftiSetMotor mGelb, ftiEin
ftiWaitForTime 3000
ftiSetMotor mRot, ftiAus
ftiSetMotor mGelb, ftiAus
Loop Until ftiFinish(0) ' --- Abbruchwunsch
Was passiert da?
Es gibt da zunächst eine Endlosschleife, die über den HALT-Button beendet
werden kann. In der Schleife dann im bunten Wechsel das Ein- und Ausschalten der
Lampen und zwischendurch wird gewartet. das ist alles.
Erweiterungen
Anzeige des Betriebszustandes in der Statuszeile durch printStatus.
Variable Zeiten.
Anlegen eines Steuerwertes Faktor mit dem die Wartezeit beeinflußt werden
kann (man muß dann beim Test nicht mehr solange warten. etwa so :
Const wFaktor = 1
.lblWert(1).Caption = "Faktor"
.txtWert(1).Text = 5
und in der Source von fishMain werden dann die entsprechende Zeilen geändert
:
ftiWaitForTime 300 * Werte(wFaktor)
usw.
Aufgabe 2
Modell wie bisher. Es soll jetzt aber noch eine (Nachts)Gelb-Blinken-Phase
geben. Das geht über eine Abfrage des Tasters E2 (dem Schiebeschalter).
modifiziertes fishMain
Do ' --- Schleife bis HALT
If ftiGetInput(eBlinken) Then
ftiSetMotor mGruen, ftiAus
Blinken
Else
ftiSetMotor mGruen, ftiEin
ftiWaitForInput eAnforderung
ftiWaitForTime 3000
ftiSetMotor mGruen, ftiAus
ftiSetMotor mGelb, ftiEin
ftiWaitForTime 4000
ftiSetMotor mGelb, ftiAus
ftiSetMotor mRot, ftiEin
ftiWaitForTime 10000
ftiSetMotor mGelb, ftiEin
ftiWaitForTime 3000
ftiSetMotor mRot, ftiAus
ftiSetMotor mGelb, ftiAus
End If
Loop Until ftiFinish(0) ' --- Abbruchwunsch
Neu in der Schleife ist das If ftiGetInput(eBlinken) mit einem
"Blinken"-Teil und dem bisherigen Befehlen. Auch neu ist die Sub
Blinken :
Private Sub Blinken()
ftiSetMotor mGelb, ftiEin
ftiWaitForTime 50 * Werte(wFaktor)
ftiSetMotor mGelb, ftiAus
ftiWaitForTime 50 * Werte(wFaktor)
End Sub
Sie enthält die Befehle für das Blinken. Auch wieder Lampe Ein/Aus, Warten.
Man sollte wieder die printStatus und den Faktor einfügen.
Aber wie ist denn das mit dem Umschalten zwischen Blinken (Nachtbetrieb) und
Normalbetrieb, wenn eBlinken beim Start des Programms gedrückt ist, blinkt es
schön. Wenn man im laufenden Betrieb eBlinken schaltet nicht immer, man muß
dann auf eAnforderung drücken um das Blinken einzuleiten. Kann man das noch
ändern. Etwa durch ein weiteres If anstelle des ftiFinish(0)?
|