Ampel

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

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)?