Händetrockner

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

Aufgabe

Der Händetrockner soll so programmiert werden, daß, sobald die Lichtschranke unterbrochen wird, der Lüfter ein- und nach 5 Sekunden wieder ausgeschaltet wird. So der Text aus "Computing Starter". Dazu wird an M1 der Ventilator (Propeller) und an M2 eine Linsenlampe angeschlossen. An E1 ist der Phototransistor angeschlossen (auf Polung achten). Phototransistor und Lampe bilden eine Lichtschranke

Anwendungskonstanten

mVentilator = 1; mLampe = 2;
eLichtschranke = 1;

Beschriftung der Textfelder

clblTitel = 'Händetrockner 1';
clblE: array[1..8] of string = ('Lichtschranke', 
       'E2', 'E3', 'E4', 'E5', 'E6', 'E7', 'E8');
clblM: array[1..4] of string = ('Ventilator', 'Lichtschranke',
       'M3', 'M4');

fishMain

begin
  ftiSetMotor(mLampe, ftiEin);
  ftiWaitForTime(Werte(wAnlaufzeit));
  repeat                   // --- Endlosschleife, Ende : HALT-Button
    if not ftiGetInput(eLichtschranke) then begin
      ftiSetMotor(mVentilator, ftiEin);
      printStatus('trocknet');
      ftiWaitForTime(Werte(wTrockenzeit));
      ftiSetMotor(mVentilator, ftiAus);
      end;
    printStatus('bereit');
  until ftiFinish(0);
end;

Was passiert da? 
Die Lampe der Lichtschranke wird eingeschaltet, dem Phototransistor wird 1 Sekunde (1000 Millisekunden) Zeit zum sicheren Erkennen der Lampe gelassen, dann startet die repeat ... until Schleife. Dort wird die Lichtschranke (Phototransistor) abgefragt, ob sie unterbrochen wurde. In diesem Fall wird der Ventilator für 5 Sekunden eingeschaltet und dann wieder abgeschaltet. Die repeat ... until Schleife wiederholt sich bis sie (ftiFinish(0)) einen Abbruchwunsch erkennt. Das ist hier der HALT-Button auf der Form, dann wird das Programm beendet.

Erweiterungen

Anzeige des Betriebszustandes in der Statuszeile : 

printStatus('trocknet');
printStatus('bereit');

printStatus gibt einen Text in die Statuszeile aus. Der Text "trocknet" sollte nach Einschalten des Ventilators erscheinen, der Text bereit, wenn die Lichtschranke steht, aber der Ventilator nicht läuft.

Variable Zeiten.

In die Felder "Steuerwerte" können beliebige numerische Werte eingegeben werden. Den oberen nennen wir Anlaufzeit und den unteren Trockenzeit. Dazu muß die Beschriftung der Textfelder erweitert werden :

Const wAnlaufzeit = 1; wTrockenzeit = 2;
clblW: array[1..2] of string = ('Anlaufzeit', 'Trockenzeit');
ctxtW: array[1..2] of string = ('1000', '5000');

und in der Source von fishMain werden dann die entsprechende Zeilen geändert :

ftiWaitForTime(Werte(wAnlaufzeit));
ftiWaitForTime(Werte(wTrockenzeit));

Aufgabe 2

Modell wie bisher. Der Lüfter soll jetzt aber nicht mehr konstant 5 Sekunden laufen, sondern, wenn die Lichtschranke nicht mehr unterbrochen ist (die Hände sind raus) den Betrieb einstellen.

modifiziertes fishMain

begin
  ftiSetMotor(mLampe, ftiEin);
  ftiWaitForTime(Werte(wAnlaufzeit));
  repeat // --- Endlosschleife, Ende : HALT-Button
    if not ftiGetInput(eLichtschranke) then begin
    ftiSetMotor(mVentilator, ftiEin);
    end
  else begin
    ftiSetMotor(mVentilator, ftiAus);
    end;
  until ftiFinish(0);
end;

Auf den ersten Blick siehts recht ähnlich aus. In der repeat ... until Schleife ist jetzt ein komplexeres If (mit Else) angesiedelt : wenn die Lichtschranke unterbrochen ist (not ftiGetInput(ePhototransistor)) wird der Ventilator eingeschaltet, wenn nicht wird er abgeschaltet (bei jedem Durchlauf der Schleife, wäre eigentlich nicht nötig, ist aber einfacher, was könnte man da tun?).

Man sollte wieder die printStatus einfügen und bei den Konstanten die nicht mehr benötigten für Trockenzeit entfernen.