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
Const mVentilator = 1, mLampe = 2
Const ePhototransistor = 1
Beschriftung der Textfelder
.lblTitel = "Händetrockner 1"
.lblEText(1).Caption = "Lichtschranke"
.lblMText(1).Caption = "Ventilator"
.lblMText(2).Caption = "Lichtschranke"
fishMain
ftiSetMotor mLampe, ftiEin
' --- Lichtschranke ein
ftiWaitForTime 1000
' Warten
Do
' --- Schleife bis HALT
If Not ftiGetInput(ePhototransistor) Then ' unterbrochen
ftiSetMotor mVentilator, ftiEin ' ---
Ventilator ein
ftiWaitForTime 5000 ' trocknen
ftiSetMotor mVentilator, ftiAus '
Ventilator aus
End If
Loop Until ftiFinish(0)
' --- Abbruchwunsch
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 Do ... Loop 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 Do ... Loop 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 ' --- bei den
Const
.lblWert(1).Caption = "Anlaufzeit"
.txtWert(1).Text = 1000
.lblWert(2).Caption = "Trockenzeit"
.txtWert(2).Text = 5000
und in der Source von fishMain werden dann die entsprechende Zeilen geändert
:
ftiWaitForTime Werte(wAnlaufzeit) ' Warten
ftiWaitForTime Werte(wTrockenzeit) ' trocknen
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
ftiSetMotor mLampe, ftiEin
' --- Lichtschranke ein
ftiWaitForTime Werte(wAnlaufzeit) ' Warten
Do
' --- Schleife bis HALT
If Not ftiGetInput(ePhototransistor) Then ' --- unterbrochen
ftiSetMotor mVentilator, ftiEin ' Ventilator ein
Else
ftiSetMotor mVentilator, ftiAus ' Ventilator aus
End If
Loop Until ftiFinish(0)
' --- Abbruchwunsch
Auf den ersten Blick siehts recht ähnlich aus. In der Do ... Loop 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.
|