Forum: Mikrocontroller und Digitale Elektronik ADC Auswertung mit Timer


von Jannis P. (jannis94)


Lesenswert?

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

: Bearbeitet durch User
von Bastler (Gast)


Lesenswert?

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.

von Jannis P. (jannis94)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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)


Lesenswert?

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

von Jannis P. (jannis94)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Jannis (Gast)


Lesenswert?

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.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.