Hallo,
ich würde gerne die ganze Zeit immer im Hintergrund meinen ADC (0) Wert
auslesen lassen und bei entsprechner Betätigung die Variablen erhöhen.
Welche dann im Hauptprogramm verwendet werden. Mein Problem ist, dass
die ADC Taster nicht erkannt werden. Also im Hauptprogramm ändert sich
nichts.
Es wird sogar auf dem Display gar nichts angezeigt. Nur wenn ich den
Enable Interrupt lösche.
Hier das Programm: 1 $regfile = "m328def.dat"
2 $crystal = 16000000
3 $hwstack = 100
4 $swstack = 100
5 $framesize = 100
6 Dim X As Byte
7 Dim Y As Byte
8 Dim Z As Byte
9 Dim Adceingang As Word
10 Dim F As Integer
11
12 Disable Jtag
13
14 F = 0
15 Y = 0
16
17 'LCD
18 Config Lcdpin = Pi , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
19 Db7 = Portd.7 , E = Pn Ortb.1 , Rs = Portb.0
20 Config Lcd = 16 * 2
21 Cursor Off Noblink
22 Cls
23
24 'ADC
25 Config Adc = Single , Prescaler = Auto , Reference = Avcc
26 Start Adc
27
28 'PinB.2 als Ausgang für das LCD Backlight
29 'Config Portb.2 = Output 'LCD Backlight
30
31 'Variablen
32 Dim Adc0in As Word
33 Dim Adc_key_in As Word 'aktueller ADC-Wert
34 Dim I As String * 10 'String für Tasternamen
35 Dim S As Integer
36 Dim R As Integer
37 Dim O As Integer
38 Dim U As Integer
39 Dim L As Integer
40
41 S = 0
42 R = 0
43 O = 0
44 U = 0
45 L = 0
46 Config Timer0 = Timer 1 , Prescale = 1 ' Timer aktiviert
47 On Timer0 Timeranfang 'Wenn ADC.7 aktiviert wurde, springt er ins Hauptprogramm und aktiviert den Timer-Interrupt
48 Enable Interrupts
49 Enable Timer0
50 Goto Anfang
51
52 '#####################Startbildschirm######################################
53 Anfang:
54 Do
55
56 Locate 1 , 1 'Ausgabe auf LCD
57 Lcd "Willkommen"
58 Locate 2 , 1
59 Lcd "loading."
60 Cursor Off
61 Waitms 1000
62 Cls
63
64 Goto Menue
65
66 Loop
67 End
68
69 Timeranfang:
70
71 Adceingang = Getadc(0) 'ADC einlesen
72
73 If Adceingang > 1000 Then
74 Goto Timeranfang
75 Elseif Adceingang < 50 Then
76 R = R + 1 'rechts
77 Elseif Adceingang < 195 Then
78 O = O + 1 'oben
79 Elseif Adceingang < 380 Then
80 U = U + 1 'unten
81 Elseif Adceingang < 555 Then
82 L = L + 1 'links
83
84 Elseif Adceingang < 790 Then
85 S = S + 1 'select
86
87 Else
88 Goto Timeranfang
89 End If
90
91 Return
92 End
93
94 '#######################Tastersteuerung####################################
95 Menue:
96
97 Locate 1 , 16 'Ausgabe auf LCD
98 Lcd "r"
99 Do
100 If R = 1 Then
101
102 Locate 1 , 1 'Ausgabe auf LCD
103 Lcd "rechts"
104 Waitms 3000
105 Cls
106
107 Else
108 Goto Menue
109
110 End If
111
112 Loop
113 End
------------------------
Für eure Hilfe wäre ich sehr dankbar. Der Hintergrund -Timer ist wichtig
für das was später weiter folgen soll. Deshalb ist es wichtig, dass er
jetzt schon funktioniert.
Ich denke der Fehler liegt irgendwie beim Timer-Interrupt, der im
Hintergrund laufen soll.
Mit freundlichen Grüßen
Jannis
23.12.2013 05:08 :
Bearbeitet durch User
von
Bastler (Gast)
23.12.2013 03:05
Hier gibt es Schreibfehler: Config Lcdpin = Pi , Db4 = Portd.4 , Db5 =
Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Pn Ortb.1 , Rs = Portb.0
Muss heißen Config Lcdpin = Pin und E = Portb.1
Goto Anweisungen sollten vermieden werden!
Aus der Timerinterruptroutine wird es wohl keine Rückkehr geben, von dem
Return gibt es ein Else zum Anfang vom Interrupt.
Ein Return ist so wie hier gemacht, nicht möglich Else Goto Timeranfang
lässt kein Return mehr zu.
Okay. Danke für deine Hilfe.
Eine Frage hätte ich noch, wie kann man dem LCD Display sagen es soll
nur die untere Zeile immer löschen anstatt alles?
Habe schon mit cls alles ausprobiert geht aber nicht.
Z.B. Cls lowerline
do
Locate 1 , 1
Lcd "Aktueller Wert."
Locate 2 , 1
Lcd "Timer in ms."
waitms 3000
cls (nur obere Zeile soll gelöscht werden, am besten mit der
Möglichkeit den Bereich genau zu definieren)
loop
end
-------------------------
Mfg
Jannis
Jannis P. schrieb:
> Okay. Danke für deine Hilfe.
> Eine Frage hätte ich noch, wie kann man dem LCD Display sagen es soll
> nur die untere Zeile immer löschen anstatt alles?
gar nicht.
"Display löschen" ist das komplette Display.
Aber niemand hindert dich daran, in der 2. Zeile eine Zeile Leerzeichen
auszugeben.
Gut, du könntest auch ganz einfach die Zahl mit der jeweils neuen
überschreiben (allerdings vollständig überschreiben!). Könntest du
machen. Dann steht auch die neue Zahl dort. Aber niemand hindert dich
daran, vorher da alles mit Leerzeichen erst mal freizumachen. Das erhöht
zwar die Flackertendenz, aber machen kannst du es.
von
Jannis (Gast)
23.12.2013 06:51
Mir ging es halt darum, dass während beide Texte angezeigt werden, der
untere überhaupt nicht aktualisiert wird, da sich bei ihm ja nichts
ändert und der obere halt ständig aktualisiert wird und dabei auch
flackern darf. Aber wenn das nicht geht, ist das okay.
Mfg Jannis
Jannis schrieb:
> Aber wenn das nicht geht, ist das okay.
Doch, geht doch, hat Karl Heinz doch gesagt. Du schreibst einfach vorher
Locate 1 , 1
Lcd " "
und dann
Locate 1 , 1
Lcd "<Wert>"
Wenn du das immer wieder hintereinander aufs LCD wirfst, flackerts kurz,
weil ja die Leerzeichen geschrieben werden und dann erst der Wert.
Bei deinen Alphanumerischen Display gehts eigentlich nur darum bei einem
Wechel von z.B. 3-stelliger auf 2-stellige Zahl das überflüssige Zeichen
zu löschen.
von
Jannis (Gast)
23.12.2013 13:55
Stimmt. Danke. Ich hab wohl in der Nacht zu lange programmiert am Rest
vom Programm, sodass ich nicht mehr klar denken konnte.
Mit freundlichen Grüßen
Jannis
Ich habe noch eine Frage, hab da ein Problem mit dem waitms einer
Schleife.
Mein Programm bietet die Möglichkeit, die Aktualisierungsrate manuell zu
ändern, welche dann in den EEprom geschrieben wird. Es ist: Waitms B
Möchte ich jetzt von dem einem Fenster zum anderen wechseln geht das,
aber er wartet erst die Zeit waitms B ab. Hab schon versucht das mit
einem Timer zu unterbinden, doch das klappt nicht so wie es soll.
Hier der Code:
Zusammengekürzt
$regfile = "m328def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
Dim X As Byte
Dim Y As Byte
Dim Z As Byte
Dim Adceingang As Word
Dim F As Integer
Dim B As Integer
'Aktualisierungsrate
Dim N As Integer
Dim Oo As Integer
Dim Uu As Integer
Dim H As Integer
Dim P As String * 10
Disable Jtag
Dim E As Integer
Dim Hh As Integer
Dim W As Integer
Dim Rr As Integer
Dim Ll As Integer
Dim Hu As Integer
Dim Huu As Integer
Dim Hm As Integer
Dim Hmm As Integer
Dim Hs As Integer
Dim Hss As Integer
Dim K As Integer
Dim Q As Integer
Dim G As Integer
Dim M As Integer
Dim Ue As Integer
Dim Iii As Integer
Dim Ii As Integer
Ii = 0
Iii = 0
Ue = 0
K = 0
Q = 0
G = 0
M = 0
Hu = 1
Huu = 2
Hm = 0
Hmm = 0
Hs = 0
Hss = 0
Hh = 0
W = 0
Ll = 0
Rr = 0
F = 0
Y = 0
Oo = 0
Uu = 0
H = 0
Readeeprom B , 0000
Config Timer1 = Timer , Prescale = 256 ' Timer
aktiviert
Enable Timer1
On Timer1 Timer_isruhrzeit 'Wenn ADC.7
aktiviert wurde, springt er ins Hauptprogramm und aktiviert den
Timer-Interrupt
Enable Interrupts
Timer1 = 3036
'LCD
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
Db7 = Portd.7 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2
Cursor Off Noblink
Cls
'ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'PinB.2 als Ausgang für das LCD Backlight
'Config Portb.2 = Output 'LCD
Backlight
'Variablen
Dim Adc0in As Word
Dim Adc_key_in As Word 'aktueller
ADC-Wert
Dim I As String * 10 'String für
Tasternamen
Dim S As Integer
Dim R As Integer
Dim O As Integer
Dim U As Integer
Dim L As Integer
S = 0
R = 0
O = 0
U = 0
L = 0
N = 0
'###################Sensorauswertung####################################
#######'
Adcauswertungssensor:
Do
If H = 0 And Ue = 1 Then
H = 0
Goto Hauptbildschirm
Elseif H = 1 And Ue = 1 Then
H = 1
Goto Giessentipp
Elseif H = -1 And Ue = 1 Then
H = 1
Goto Giessentipp
Elseif H = 2 And Ue = 1 Then
H = 0
Goto Hauptbildschirm
Elseif H = 3 And Ue = 1 Then
H = 1
Goto Giessentipp
Elseif H = 4 And Ue = 1 Then
H = 0
Goto Hauptbildschirm
Elseif H = 5 And Ue = 1 Then
H = 1
Goto Giessentipp
Elseif H = -2 And Ue = 1 Then
H = 0
Goto Hauptbildschirm
Elseif H = -3 And Ue = 1 Then
H = 1
Goto Giessentipp
Elseif H = -4 And Ue = 1 Then
H = 0
Goto Hauptbildschirm
Elseif H = -5 And Ue = 1 Then
H = 1
Goto Giessentipp
Elseif Ue = 4 Then
Ue = 0
H = 0
Goto Eetester
Else
Goto Adcauswertungssensor
End If
Loop
End
Eetester:
If B = 1000 Then
B = Ii
Writeeeprom B , 0000
Waitms 1000
Goto Menue
Else
B = B
Waitms 1000
Goto Menue
End If
End
'######################Hauptprogramm####################################
#######'
Hauptbildschirm:
Do
Locate 1 , 1
Lcd " " 'Wasser?:
Befehl entfernen
S = 0
Adc_key_in = Getadc(1)
'ADC einlesen
Locate 2 , 1
Lcd "ADC1: " ; Adc_key_in ; " "
If Adc_key_in > 1000 Then
I = "100 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(1)
Locate 1 , 6 : Lcd Chr(1)
Locate 1 , 7 : Lcd Chr(1)
Locate 1 , 8 : Lcd Chr(1)
Locate 1 , 9 : Lcd Chr(1)
Locate 1 , 10 : Lcd Chr(1)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 965 Then
I = "95 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(1)
Locate 1 , 6 : Lcd Chr(1)
Locate 1 , 7 : Lcd Chr(1)
Locate 1 , 8 : Lcd Chr(1)
Locate 1 , 9 : Lcd Chr(1)
Locate 1 , 10 : Lcd Chr(2)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 2 , 32 , 32 , 32 , 32 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 930 Then
I = "90 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(1)
Locate 1 , 6 : Lcd Chr(1)
Locate 1 , 7 : Lcd Chr(1)
Locate 1 , 8 : Lcd Chr(1)
Locate 1 , 9 : Lcd Chr(1)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 880 Then
I = "85 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(1)
Locate 1 , 6 : Lcd Chr(1)
Locate 1 , 7 : Lcd Chr(1)
Locate 1 , 8 : Lcd Chr(1)
Locate 1 , 9 : Lcd Chr(2)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 2 , 32 , 32 , 32 , 32 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 830 Then
I = "80 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(1)
Locate 1 , 6 : Lcd Chr(1)
Locate 1 , 7 : Lcd Chr(1)
Locate 1 , 8 : Lcd Chr(1)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 780 Then
I = "75 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(1)
Locate 1 , 6 : Lcd Chr(1)
Locate 1 , 7 : Lcd Chr(1)
Locate 1 , 8 : Lcd Chr(2)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 2 , 32 , 32 , 32 , 32 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 730 Then
I = "70 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(1)
Locate 1 , 6 : Lcd Chr(1)
Locate 1 , 7 : Lcd Chr(1)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 680 Then
I = "65 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(1)
Locate 1 , 6 : Lcd Chr(1)
Locate 1 , 7 : Lcd Chr(2)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 2 , 32 , 32 , 32 , 32 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 630 Then
I = "60 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(1)
Locate 1 , 6 : Lcd Chr(1)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 580 Then
I = "55 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(1)
Locate 1 , 6 : Lcd Chr(2)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 2 , 32 , 32 , 32 , 32 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 530 Then
I = "50 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(1)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 480 Then
I = "45 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Locate 1 , 5 : Lcd Chr(2)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 2 , 32 , 32 , 32 , 32 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 430 Then
I = "40 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(1)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 380 Then
I = "35 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Locate 1 , 4 : Lcd Chr(2)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 2 , 32 , 32 , 32 , 32 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 330 Then
I = "30 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(1)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 280 Then
I = "25 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Locate 1 , 3 : Lcd Chr(2)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 2 , 32 , 32 , 32 , 32 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 230 Then
I = "20 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(1)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 180 Then
I = "15 %"
Locate 1 , 1 : Lcd Chr(1)
Locate 1 , 2 : Lcd Chr(2)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 2 , 32 , 32 , 32 , 32 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 130 Then
I = "10 %"
Locate 1 , 1 : Lcd Chr(1)
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Elseif Adc_key_in > 29 Then
I = "5 %"
Locate 1 , 1 : Lcd Chr(1)
Deflcdchar 1 , 32 , 32 , 32 , 32 , 31 , 31 , 31 , 31
Elseif Adc_key_in < 30 Then
I = "0 %"
Locate 1 , 1 : Lcd Chr(1)
Deflcdchar 1 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 31
Else
Goto Adcauswertungssensor
End If
Locate 1 , 12 'Ausgabe auf
LCD
Lcd I
Ii = B
Waitms B
If B = 1000 Then
B = Ii
Writeeeprom B , 0000
Else
B = B
End If
Cls
Goto Adcauswertungssensor
Loop
End
'##################Gießen-Tipp##########################################
#######'
Giessentipp:
Do
Adc_key_in = Getadc(1) 'ADC
einlesen
If Adc_key_in > 1000 Then
P = "100 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Gesaettigt"
Elseif Adc_key_in > 965 Then
P = "95 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Nicht giessen"
Elseif Adc_key_in > 930 Then
P = "90 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Nicht giessen"
Elseif Adc_key_in > 880 Then
P = "85 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Nicht giessen"
Elseif Adc_key_in > 830 Then
P = "80 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Nicht giessen"
Elseif Adc_key_in > 780 Then
P = "75 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Noch genug"
Elseif Adc_key_in > 730 Then
P = "70 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Noch genug"
Elseif Adc_key_in > 680 Then
P = "65 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Noch genug"
Elseif Adc_key_in > 630 Then
P = "60 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Noch genug"
Elseif Adc_key_in > 580 Then
P = "55 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Langsam giessen"
Elseif Adc_key_in > 530 Then
P = "50 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Langsam giessen"
Elseif Adc_key_in > 480 Then
P = "45 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Langsam giessen"
Elseif Adc_key_in > 430 Then
P = "40 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Giessen evtl."
Elseif Adc_key_in > 380 Then
P = "35 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Giessen evtl."
Elseif Adc_key_in > 330 Then
P = "30 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Giessen"
Elseif Adc_key_in > 280 Then
P = "25 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Bitte Giessen"
Elseif Adc_key_in > 230 Then
P = "20 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Bitte giessen"
Elseif Adc_key_in > 180 Then
P = "15 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Bitte giessen"
Elseif Adc_key_in > 130 Then
P = "10 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Jetzt giessen "
Elseif Adc_key_in > 29 Then
P = "5 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "Sofort giessen"
Elseif Adc_key_in < 30 Then
P = "0 %"
Locate 2 , 1 'Ausgabe auf
LCD
Lcd "!!TOO LATE!!"
Else
Goto Adcauswertungssensor
End If
Locate 1 , 1
Lcd "Wasser?:"
Locate 1 , 12
Lcd P
Ii = B
Waitms B
If B = 1000 Then
B = Ii
Writeeeprom B , 0000
Else
B = B
End If
Cls
Goto Adcauswertungssensor
Loop
End
'#######################################################################
#######'
Timer_isruhrzeit:
Timer1 = 3036
' ist teil eines anderen programmes
If Hss < 9 Then
Hss = Hss + 1
Elseif Hss = 9 And Hs < 5 Then
Hss = 0
Hs = Hs + 1
Elseif Hs = 5 And Hss = 9 And Hmm < 9 Then
Hs = 0
Hss = 0
Hmm = Hmm + 1
Elseif Hmm = 9 And Hs = 5 And Hss = 9 And Hm < 5 Then
Hm = Hm + 1
Hmm = 0
Hs = 0
Hss = 0
Elseif Hm = 5 And Hmm = 9 And Hs = 5 And Hss = 9 And Huu < 9 And Hu < 2
Then
Huu = Huu + 1
Hm = 0
Hmm = 0
Hs = 0
Hss = 0
Elseif Huu = 9 And Hm = 5 And Hmm = 9 And Hs = 5 And Hss = 9 And Hu < 2
Then
Hu = Hu + 1
Huu = 0
Hm = 0
Hmm = 0
Hs = 0
Hss = 0
Elseif Hu = 2 And Huu < 3 And Hm = 5 And Hmm = 9 And Hs = 5 And Hss = 9
Then
Huu = Huu + 1
Hm = 0
Hmm = 0
Hs = 0
Hss = 0
Elseif Hu = 2 And Huu = 3 And Hm = 5 And Hmm = 9 And Hs = 5 And Hss = 9
Then
Hu = 0
Huu = 0
Hm = 0
Hmm = 0
Hs = 0
Hss = 0
End If
Goto Teil2
Teil2:
If Ue = 1 Then
Goto Teil2.1
Else
Ue = Ue
Dahin:
End If
Return
Teil2.1:
Adceingang = Getadc(0)
If Adceingang > 1000 Then
H = H
Elseif Adceingang < 50 Then
H = H
'rechts
Elseif Adceingang < 195 Then
Locate 2 , 16 : Lcd Chr(1)
Deflcdchar 1 , 4 , 14 , 31 , 14 , 14 , 14 , 14 , 14
H = H + 1
B = 1000
Writeeeprom B , 0000
Locate 1 , 1
Lcd " "
Locate 2 , 1
Lcd " "
'oben
Elseif Adceingang < 380 Then
Locate 2 , 16 : Lcd Chr(2)
Deflcdchar 2 , 14 , 14 , 14 , 14 , 14 , 31 , 14 , 4
H = H - 1
B = 1000
Writeeeprom B , 0000
Locate 1 , 1
Lcd " "
Locate 2 , 1
Lcd " "
'unten
Elseif Adceingang < 555 Then
H = H 'links
Elseif Adceingang < 790 Then
Ue = Ue + 3
End If
Goto Dahin
'#######################################################################
#######'
-------------------------------
Ich möchte also, dass das waitms B abgebrochen wird, wenn der Timer
erkennt, dass eine taste gedrückt wurde und das Programm springt zum
Anfang zurück.
Danke für eure Hilfe
Jannis P. schrieb:
> Ich möchte also, dass das waitms B abgebrochen wird,
langer Rede kurzer Sinn. Du kannst waitms nicht abbrechen.
Aber wenn man 50 mal 10 ms wartet, hat man in Summe auch 500ms gewartet.
Einziger Unterschied: man kann nach jeweils 10ms kurz mal einen Blick
auf die Tasten werfen, ob eine gedrückt ist. Etwas das man nicht kann,
wenn man 500ms in einem Rutsch wartet.
Das dürfte im Moment in deiner Situation das einfachste sein, auch wenn
es normalerweise eine Schlechte Lösung ist. Aber dazu müsste man wohl
das Programm komplett überarbeiten.
27.12.2013 00:49 :
Bearbeitet durch User
von
Jannis (Gast)
28.12.2013 22:17
Hab es jetzt so realisiert. Danke für die Hilfe.
Mfg
Jannis
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.