Jedi
04.12.2004, 15:53
Hallo!
Voller freude über meinen RP5 wollte ich gleich mal einige Ideen für den Fahrenden stromfresser realisieren. Leider scheitere ich schon bei meiner 1. Idee, mittels Doppel-Berührung auf den Touchsensor eine Reaktion hervorzurufen.
Eine Variable, die ich zur Verwaltung von Doppel-Berührungen brauche und die im Code immer zwischen 0 und 1 geswitcht wird, nimmt interessanter Weise Werte wie 40, etc. an.
Wie ist das möglich?
Hier der Code - TOUCH_EVAL ist die problematische Variable
'--------------------------------------------
' Vars
'--------------------------------------------
define TEMP_TOUCH byte
define TOUCH1 byte ' 1. Druck
define TOUCH2 byte ' 2. Druck
define TOUCH_EVAL byte ' Soll Druck evaluiert werden (Verhindern von mehrfachzählen des Gleichen)
define TOUCH_COUNTER word ' Abbruch von Auswertung nach längerer Inaktivität
define MAKE_EXIT byte ' Soll am Ende des Durchlaufes abgebrochen werden?
define MAKE_RUNNINGLEDS byte ' Lauflicht machen
'--------------------------------------------
' Parametric Vars
'--------------------------------------------
define LEDVALUE byte
'--------------------------------------------
' Init
'--------------------------------------------
TOUCH1 = 0
TOUCH2 = 0
TOUCH_EVAL = 1
MAKE_EXIT = 0
MAKE_RUNNINGLEDS = 0
'--------------------------------------------
' Human Interface
'--------------------------------------------
#hi
TEMP_TOUCH = TOUCH ' buffering
IF TEMP_TOUCH < 10 THEN TEMP_TOUCH = 0 ' tolerance
TOUCH_COUNTER = TOUCH_COUNTER + 1
IF TOUCH_COUNTER > 99 THEN goto SET_TOUCH_COMMAND
IF TEMP_TOUCH = 0 THEN TOUCH_EVAL = 1
IF TEMP_TOUCH > 0 AND TOUCH1 = 0 AND TOUCH_EVAL > 0 THEN goto SET_TOUCH1
IF TEMP_TOUCH > 0 AND TOUCH1 > 0 AND TOUCH2 = 0 AND TOUCH_EVAL > 0 THEN goto SET_TOUCH2
GOTO END_TOUCH_DEFS
#SET_TOUCH1
TOUCH1 = 1
TOUCH_EVAL = 0
TOUCH_COUNTER = 0
GOTO END_TOUCH_DEFS
#SET_TOUCH2
TOUCH2 = 1
TOUCH_EVAL = 0
TOUCH_COUNTER = 0
GOTO END_TOUCH_DEFS
#SET_TOUCH_COMMAND
IF TOUCH1 = 1 AND TOUCH2 = 1 THEN MAKE_EXIT = 1
IF TOUCH1 = 1 AND TOUCH2 = 0 THEN MAKE_RUNNINGLEDS = 1
TOUCH_COUNTER = 0 : TOUCH1 = 0 : TOUCH2 = 0 ' reset vars
goto ei
#END_TOUCH_DEFS
LEDVALUE = TOUCH1 + TOUCH2 * 2
if TOUCH >= 200 THEN MAKE_EXIT = 1
print touch, touch_eval, touch1, touch2, touch_counter, temp_touch
'--------------------------------------------
' Environment Interface
'--------------------------------------------
#ei
'--------------------------------------------
' Reaction
'--------------------------------------------
#re
IF MAKE_EXIT = 1 THEN GOTO EXIT
IF MAKE_RUNNINGLEDS = 1 THEN GOSUB RUNNINGLEDS
MAKE_RUNNINGLEDS = 0 : MAKE_EXIT = 0 ' reset reactions
'--------------------------------------------
' Output
'--------------------------------------------
#out
pause 5
GOSUB SETLEDS
' RETURN TO BEGINNING
GOTO hi
'--------------------------------------------
' EXIT
'--------------------------------------------
#EXIT
GOSUB LEDSOFF
beep 600,5,0
print "ENDE"
END
Wie schon erwähnt - ich switch TOUCH_EVAL zwischen 0 und 1 und trotzdem kommen auch andere Werte vor, die mir natürlich alles zusammen haun.
Ich wär euch sehr dankbar für Tips. Ich habs nach etnlichen Stunden Fehlersuchen aufgegeben.
Ciao
Voller freude über meinen RP5 wollte ich gleich mal einige Ideen für den Fahrenden stromfresser realisieren. Leider scheitere ich schon bei meiner 1. Idee, mittels Doppel-Berührung auf den Touchsensor eine Reaktion hervorzurufen.
Eine Variable, die ich zur Verwaltung von Doppel-Berührungen brauche und die im Code immer zwischen 0 und 1 geswitcht wird, nimmt interessanter Weise Werte wie 40, etc. an.
Wie ist das möglich?
Hier der Code - TOUCH_EVAL ist die problematische Variable
'--------------------------------------------
' Vars
'--------------------------------------------
define TEMP_TOUCH byte
define TOUCH1 byte ' 1. Druck
define TOUCH2 byte ' 2. Druck
define TOUCH_EVAL byte ' Soll Druck evaluiert werden (Verhindern von mehrfachzählen des Gleichen)
define TOUCH_COUNTER word ' Abbruch von Auswertung nach längerer Inaktivität
define MAKE_EXIT byte ' Soll am Ende des Durchlaufes abgebrochen werden?
define MAKE_RUNNINGLEDS byte ' Lauflicht machen
'--------------------------------------------
' Parametric Vars
'--------------------------------------------
define LEDVALUE byte
'--------------------------------------------
' Init
'--------------------------------------------
TOUCH1 = 0
TOUCH2 = 0
TOUCH_EVAL = 1
MAKE_EXIT = 0
MAKE_RUNNINGLEDS = 0
'--------------------------------------------
' Human Interface
'--------------------------------------------
#hi
TEMP_TOUCH = TOUCH ' buffering
IF TEMP_TOUCH < 10 THEN TEMP_TOUCH = 0 ' tolerance
TOUCH_COUNTER = TOUCH_COUNTER + 1
IF TOUCH_COUNTER > 99 THEN goto SET_TOUCH_COMMAND
IF TEMP_TOUCH = 0 THEN TOUCH_EVAL = 1
IF TEMP_TOUCH > 0 AND TOUCH1 = 0 AND TOUCH_EVAL > 0 THEN goto SET_TOUCH1
IF TEMP_TOUCH > 0 AND TOUCH1 > 0 AND TOUCH2 = 0 AND TOUCH_EVAL > 0 THEN goto SET_TOUCH2
GOTO END_TOUCH_DEFS
#SET_TOUCH1
TOUCH1 = 1
TOUCH_EVAL = 0
TOUCH_COUNTER = 0
GOTO END_TOUCH_DEFS
#SET_TOUCH2
TOUCH2 = 1
TOUCH_EVAL = 0
TOUCH_COUNTER = 0
GOTO END_TOUCH_DEFS
#SET_TOUCH_COMMAND
IF TOUCH1 = 1 AND TOUCH2 = 1 THEN MAKE_EXIT = 1
IF TOUCH1 = 1 AND TOUCH2 = 0 THEN MAKE_RUNNINGLEDS = 1
TOUCH_COUNTER = 0 : TOUCH1 = 0 : TOUCH2 = 0 ' reset vars
goto ei
#END_TOUCH_DEFS
LEDVALUE = TOUCH1 + TOUCH2 * 2
if TOUCH >= 200 THEN MAKE_EXIT = 1
print touch, touch_eval, touch1, touch2, touch_counter, temp_touch
'--------------------------------------------
' Environment Interface
'--------------------------------------------
#ei
'--------------------------------------------
' Reaction
'--------------------------------------------
#re
IF MAKE_EXIT = 1 THEN GOTO EXIT
IF MAKE_RUNNINGLEDS = 1 THEN GOSUB RUNNINGLEDS
MAKE_RUNNINGLEDS = 0 : MAKE_EXIT = 0 ' reset reactions
'--------------------------------------------
' Output
'--------------------------------------------
#out
pause 5
GOSUB SETLEDS
' RETURN TO BEGINNING
GOTO hi
'--------------------------------------------
' EXIT
'--------------------------------------------
#EXIT
GOSUB LEDSOFF
beep 600,5,0
print "ENDE"
END
Wie schon erwähnt - ich switch TOUCH_EVAL zwischen 0 und 1 und trotzdem kommen auch andere Werte vor, die mir natürlich alles zusammen haun.
Ich wär euch sehr dankbar für Tips. Ich habs nach etnlichen Stunden Fehlersuchen aufgegeben.
Ciao