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

mTuer = 1; mLampe = 2;
eTuerZu = 1; eTuerAuf = 2; etuerOeffnen = 3; ePhototransistor = 4;

Beschriftung der Textfelder

clblTitel = 'Schiebetür 1';
clblE: array[1..8] of string = ('TürZu', 'TürAuf', 'Türöffnen',
       'Lichtschranke', 'E5', 'E6', 'E7', 'E8');
clblM: array[1..4] of string = ('Tür', 'Lichtschranke', 'M3', 'M4');

fishMain

begin
  repeat                    // --- Endlosschleife, Ende : HALT-Button
    ftiSetMotor(mTuer, ftiLinks);
    ftiWaitForInput(eTuerZu, false);
    ftiSetMotor(mTuer, ftiAus);
    ftiWaitForInput(eTuerOeffnen, true);
    ftiSetMotor(mTuer, ftiRechts);
    ftiWaitForInput(eTuerAuf, true);
    ftiSetMotor(mTuer, ftiAus);
    ftiWaitForTime(5000);
  Until ftiFinish(0);
end;

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

begin
  ftiSetMotor(mLampe, ftiEin);
  ftiWaitForTime(1000);
  ftiWaitForInput(ePhotoTransistor, true);
  repeat                   // --- Endlosschleife, Ende : HALT-Button
    while ftiGetInput(eTuerZu) do begin
      ftiSetMotor(mTuer, ftiLinks);
      if not ftiGetInput(ePhotoTransistor) then TuerOeffnen();
      end;
    ftiSetMotor(mTuer, ftiAus);
    ftiWaitForInput(eTuerOeffnen, true);
    TuerOeffnen();
  until ftiFinish(0);
end;

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 :

procedure TuerOeffnen();
begin
  ftiSetMotor(mTuer, ftiRechts);
  ftiWaitForInput(eTuerAuf, true);
  ftiSetMotor(mTuer, ftiAus);
  ftiWaitForTime(5000);
end;

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?