Schiebetür

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

Aufgabe

Wenn Taster E3 gedrückt wird, soll sich die Tür öffnen und nach 5 Sekunden wieder schließen. Türmotor an M1, Taster TürZu an E1, Taster TürAuf an E2 und Taster TürÖffnen an E3

Anwendungskonstanten

Const mTuer = 1, mLampe = 2
Const eTuerZu = 1, eTuerAuf = 2, eTuerOeffnen = 3, ePhotoTransistor=4

Beschriftung der Textfelder

.lblTitel = "Schiebetür 1"
.lblEText(1).Caption = "TürZu"
.lblEText(2).Caption = "TürAuf"
.lblEText(3).Caption = "TürÖffnen"
.lblEText(4).Caption = "Lichtschranke"
.lblMText(1).Caption = "Tür"
.lblMText(2).Caption = "Lichtschranke"

fishMain

Do       ' --- Schleife bis HALT
  ftiSetMotor mTuer, ftiLinks           ' --- Tür schließen
  ftiWaitForInput eTuerZu, False
  ftiSetMotor mTuer, ftiAus
  ftiWaitForInput eTuerOeffnen          ' --- Warten auf Anforderung
  ftiSetMotor mTuer, ftiRechts          ' --- Tür öffnen
  ftiWaitForInput eTuerAuf
  ftiSetMotor mTuer, ftiAus
  ftiWaitForTime 5000                   '     5 Sekunden offen
Loop Until ftiFinish(0) ' --- Abbruchwunsch

Was passiert da? 
Es gibt da zunächst wieder eine Endlosschleife, die über den HALT-Button beendet werden kann. In der Schleife wird znächst die Tür geschlossen, dann wird auf eine Anforderung zum Öffnen der Tür gewartet und bei Anforderung geöffnet. 

Erweiterungen

Anzeige des Betriebszustandes in der Statuszeile durch printStatus wie gehabt. 

Variable Zeiten : Anlegen eines Steuerwertes OffenZeit wie gehabt.

Aufgabe 2

Modell wie bisher. Es soll jetzt aber durch eine Lichtschranke verhindert werden, daß die Tür schließt, wenn Gegenstände oder Menschen in der Türöffnung sind (Lichtschranke ist unterbrochen).

modifiziertes fishMain

ftiSetMotor mLampe, ftiEin
ftiWaitForTime 1000
ftiWaitForInput ePhotoTransistor, True
Do         ' --- Schleife bis HALT
  Do
    ftiSetMotor mTuer, ftiLinks
    If Not ftiGetInput(ePhotoTransistor) Then TuerOeffnen
  Loop While ftiGetInput(eTuerZu)
  ftiSetMotor mTuer, ftiAus
  ftiWaitForInput eTuerOeffnen
  TuerOeffnen
Loop Until ftiFinish(0) ' --- Abbruchwunsch

Vor der Schleife wird wieder die Lichtschranke gestartet. Das Türschließen wird jetzt nicht mehr durch ein einzelnes fitWaitForInput festgestellt, sondern in einer zusätzlichen (geschachtelten) Schleife in der die Lichtschranke geprüft wird. Ist sie unterbrochen wird die Tüer geöffnet. Die Schleife wird beendet, wenn die Tür geschlossen ist. Anschließend wird auf eine ÖffnenAnforderung gewartet. Das TürÖffnen wird hier zweimal benötigt und wird deswegen in ein Unterprogramm gelegt :

Private Sub TuerOeffnen()
  ftiSetMotor mTuer, ftiRechts
  ftiWaitForInput eTuerAuf
  ftiSetMotor mTuer, ftiAus
  ftiWaitForTime 5000
End Sub

Man sollte wieder die printStatus und den Faktor einfügen.

Wodurch unterscheidet sich eigentlich die vorgestellte Lösung durch die im "Computing Starter" Begleitheft  gestellte Aufgabe 2?