Toxic
26.03.2004, 14:56
Ok,
langam han ich für heut genug. Wieder nur Probleme:
1. Wenn ich F1 ein paar mal hintereinander betätige (nur im Basic-Editor),
passiert es zwischenzeitlich (1v5 mal) das er die routiene für F2 startet (nein! ich bin nicht zu dumm zum klicken!!!)
2. Wenn ich das Prog auf die Station lade, F1 drücke (für Shutdown) beendet sich das Prog (wie ja auch gewollt), nur das, wenn ich sie wieder anmache er immer wierder shutdown2 aufruft (also quasi "end")
hier main Code:
' --- Definitionen ---
' Die Digital-Ports für das öffnen der Tür
' und der Lüfterregelungund im Bad
define DP1 port[1]
define DP2 port[2]
define DP3 port[3]
define DP4 port[4]
' Die Relais
define K1 port[7]
define K2 port[8]
' Die Folien-Funktionstasten
define F1 port[9]
define F2 port[10]
' Die LED`S für die Zustandsanzeige und
' die Tastendruck-Bestätigung
define LED1 port[13]
define LED2 port[14]
define LED3 port[15]
define LED4 port[16]
' Die Analogports für die Überwachung
' der Tür und der Luftfeuchtigkeit im Bad
define AP1 ad[1]
define AP2 ad[2]
' Die Temperatursensor-Ports
define TS1 ad[5]
define TS2 ad[6]
' Zwei Variablen zur Speicherung der Temperatur
define temp word[1]
define temp2 word[2]
' Variable für die Speicherung empfangener
' Daten und zum counten der Shutdown-Schleife
define Data byte[5]
define ShutCnt byte[6]
' Variablen zum counten der Temperaturschaltung
define v_IntCoolOn bit[49]
define v_IntCoolOff bit[50]
define v_ExHeatOn bit[51]
define v_ExHeatOff bit[52]
' symbolische Konstanten für die Schaltschwellwerte
' (zehnfache Temperaturwerte)
define IntCool 220 ' = 24.0 °C
define ExHeat 250 ' = 20.0 °C
define Dong 155 ' = 1,55 V
' --- das Programm ---
' Initialisierung
DP1 = 0
DP2 = 0
DP3 = 0
DP4 = 0
K1 = OFF
K2 = OFF
LED1 = OFF
LED2 = OFF
LED3 = OFF
LED4 = OFF
ShutCnt = 0
v_IntCoolOn = 0
v_IntCoolOff = 0
v_ExHeatOn = 0
v_ExHeatOff = 0
#Main
' AD-Wandlerwert in Temperatur umrechnen
temp = 5 * TS1 - 250 '(5 * T1 - 250) /10
temp2 = 5 * TS2 - 250 '(5 * T2 - 250) /10
' Datenkontainer leeren
Data = 0
' Abfragen
if temp => IntCool then gosub IntCoolOn Else gosub IntCoolOff
if temp2 =< ExHeat then gosub ExHeatOn Else gosub ExHeatOff
if AP1 => Dong then gosub Klingeln
if not F1 then gosub F1Push
if not F2 then gosub F2Push
goto Main
#IntCoolOn
If v_IntCoolOn = -1 then Return
v_IntCoolOn = v_IntCoolOn -1
v_IntCoolOff = 0
Print "1"
Pause 10
K1 = ON
LED3 = ON
return
#IntCoolOff
If v_IntCoolOff = -1 then Return
v_IntCoolOff = v_IntCoolOff -1
v_IntCoolOn = 0
Print "2"
Pause 10
K1 = OFF
LED3 = OFF
return
#ExHeatOn
If v_ExHeatOn = -1 then Return
v_ExHeatOn = v_ExHeatOn - 1
v_ExHeatOff = 0
Print "3"
K2 = ON
LED4 = ON
return
#ExHeatOff
If v_ExHeatOff = -1 then Return
v_ExHeatOff = v_ExHeatOff - 1
v_ExHeatOn = 0
Print "4"
K2 = OFF
LED4 = OFF
return
#F1Push
LED1 = ON
Beep 568,5,0
Wait F1
Print "101"
Pause 25
LED1 = OFF
if not RXD then Print "101" Else gosub RxData
gosub Shutdown1
#F2Push
LED2 = ON
Beep 568,5,0
Wait F2
Pause 10
if v_IntCoolOn = -1 then Print "1" Else Print "2"
gosub SendTemp1
pause 10
if v_ExHeatOn = -1 then Print "3" Else Print "4"
gosub SendTemp2
LED2 = OFF
return
#Shutdown1
Beep 480,15,10
ShutCnt = ShutCnt + 1
if ShutCnt = 4 then gosub Shutdown2
if not RXD then Print "101" Else gosub RxData
gosub Shutdown1
#Shutdown2
Beep 568,10,2
Beep 568,10,2
Beep 568,10,2
Beep 480,15,0
end
#RxData
Input Data
if Data = 101 then gosub Shutdown2
if Data = 112 then gosub SendTemp1
if Data = 123 then gosub SendTemp2
if Data = 202 then gosub DoorOpen1
if Data = 213 then gosub DoorOpen2
if Data =< 100 then goto Main
Data = 0
return
#SendTemp1
print "Temperatur an T1 = "; temp; "°C";
print
tog LED3
pause 10
tog LED3
pause 10
tog LED3
pause 10
tog LED3
return
#SendTemp2
print "Temperatur an T2 = "; temp2; "°C";
print
tog LED4
pause 10
tog LED4
pause 10
tog LED4
pause 10
tog LED4
return
#Klingeln
Print "DingDong"
Pause 5
Print "DingDong"
return
#DoorOpen1
LED3 = ON
Beep 568,5,0
LED3 = OFF
return
#DoorOpen2
LED3 = ON
Beep 568,5,0
LED3 = OFF
return
langam han ich für heut genug. Wieder nur Probleme:
1. Wenn ich F1 ein paar mal hintereinander betätige (nur im Basic-Editor),
passiert es zwischenzeitlich (1v5 mal) das er die routiene für F2 startet (nein! ich bin nicht zu dumm zum klicken!!!)
2. Wenn ich das Prog auf die Station lade, F1 drücke (für Shutdown) beendet sich das Prog (wie ja auch gewollt), nur das, wenn ich sie wieder anmache er immer wierder shutdown2 aufruft (also quasi "end")
hier main Code:
' --- Definitionen ---
' Die Digital-Ports für das öffnen der Tür
' und der Lüfterregelungund im Bad
define DP1 port[1]
define DP2 port[2]
define DP3 port[3]
define DP4 port[4]
' Die Relais
define K1 port[7]
define K2 port[8]
' Die Folien-Funktionstasten
define F1 port[9]
define F2 port[10]
' Die LED`S für die Zustandsanzeige und
' die Tastendruck-Bestätigung
define LED1 port[13]
define LED2 port[14]
define LED3 port[15]
define LED4 port[16]
' Die Analogports für die Überwachung
' der Tür und der Luftfeuchtigkeit im Bad
define AP1 ad[1]
define AP2 ad[2]
' Die Temperatursensor-Ports
define TS1 ad[5]
define TS2 ad[6]
' Zwei Variablen zur Speicherung der Temperatur
define temp word[1]
define temp2 word[2]
' Variable für die Speicherung empfangener
' Daten und zum counten der Shutdown-Schleife
define Data byte[5]
define ShutCnt byte[6]
' Variablen zum counten der Temperaturschaltung
define v_IntCoolOn bit[49]
define v_IntCoolOff bit[50]
define v_ExHeatOn bit[51]
define v_ExHeatOff bit[52]
' symbolische Konstanten für die Schaltschwellwerte
' (zehnfache Temperaturwerte)
define IntCool 220 ' = 24.0 °C
define ExHeat 250 ' = 20.0 °C
define Dong 155 ' = 1,55 V
' --- das Programm ---
' Initialisierung
DP1 = 0
DP2 = 0
DP3 = 0
DP4 = 0
K1 = OFF
K2 = OFF
LED1 = OFF
LED2 = OFF
LED3 = OFF
LED4 = OFF
ShutCnt = 0
v_IntCoolOn = 0
v_IntCoolOff = 0
v_ExHeatOn = 0
v_ExHeatOff = 0
#Main
' AD-Wandlerwert in Temperatur umrechnen
temp = 5 * TS1 - 250 '(5 * T1 - 250) /10
temp2 = 5 * TS2 - 250 '(5 * T2 - 250) /10
' Datenkontainer leeren
Data = 0
' Abfragen
if temp => IntCool then gosub IntCoolOn Else gosub IntCoolOff
if temp2 =< ExHeat then gosub ExHeatOn Else gosub ExHeatOff
if AP1 => Dong then gosub Klingeln
if not F1 then gosub F1Push
if not F2 then gosub F2Push
goto Main
#IntCoolOn
If v_IntCoolOn = -1 then Return
v_IntCoolOn = v_IntCoolOn -1
v_IntCoolOff = 0
Print "1"
Pause 10
K1 = ON
LED3 = ON
return
#IntCoolOff
If v_IntCoolOff = -1 then Return
v_IntCoolOff = v_IntCoolOff -1
v_IntCoolOn = 0
Print "2"
Pause 10
K1 = OFF
LED3 = OFF
return
#ExHeatOn
If v_ExHeatOn = -1 then Return
v_ExHeatOn = v_ExHeatOn - 1
v_ExHeatOff = 0
Print "3"
K2 = ON
LED4 = ON
return
#ExHeatOff
If v_ExHeatOff = -1 then Return
v_ExHeatOff = v_ExHeatOff - 1
v_ExHeatOn = 0
Print "4"
K2 = OFF
LED4 = OFF
return
#F1Push
LED1 = ON
Beep 568,5,0
Wait F1
Print "101"
Pause 25
LED1 = OFF
if not RXD then Print "101" Else gosub RxData
gosub Shutdown1
#F2Push
LED2 = ON
Beep 568,5,0
Wait F2
Pause 10
if v_IntCoolOn = -1 then Print "1" Else Print "2"
gosub SendTemp1
pause 10
if v_ExHeatOn = -1 then Print "3" Else Print "4"
gosub SendTemp2
LED2 = OFF
return
#Shutdown1
Beep 480,15,10
ShutCnt = ShutCnt + 1
if ShutCnt = 4 then gosub Shutdown2
if not RXD then Print "101" Else gosub RxData
gosub Shutdown1
#Shutdown2
Beep 568,10,2
Beep 568,10,2
Beep 568,10,2
Beep 480,15,0
end
#RxData
Input Data
if Data = 101 then gosub Shutdown2
if Data = 112 then gosub SendTemp1
if Data = 123 then gosub SendTemp2
if Data = 202 then gosub DoorOpen1
if Data = 213 then gosub DoorOpen2
if Data =< 100 then goto Main
Data = 0
return
#SendTemp1
print "Temperatur an T1 = "; temp; "°C";
tog LED3
pause 10
tog LED3
pause 10
tog LED3
pause 10
tog LED3
return
#SendTemp2
print "Temperatur an T2 = "; temp2; "°C";
tog LED4
pause 10
tog LED4
pause 10
tog LED4
pause 10
tog LED4
return
#Klingeln
Print "DingDong"
Pause 5
Print "DingDong"
return
#DoorOpen1
LED3 = ON
Beep 568,5,0
LED3 = OFF
return
#DoorOpen2
LED3 = ON
Beep 568,5,0
LED3 = OFF
return