PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Menü-Programmierung



Driona
15.08.2007, 23:07
Aaaaalso....

Ich habe vor, eine Menüführung zu Programmieren, bei der ich zwischen den einzelnen Bereichen mit zwei Tasten hin und her springen kann... bzw vor und zurück blättern...

Soweit klappt das ja, nur möchte ich jetzt verhindern, daß wenn ich den Finger einfach auf der Taste lasse, der durch das ganze Menü durchfliegt....

Code hier:

define keyin ad[8]
define menubyte as byte
define Licht port[16]

#start
menubyte = 0
Licht = off

lcd.Init
lcd.clear
lcd.pos 1, 1
lcd.print "Startmenue"
lcd.off

#byterechnung
if keyin = 34 then
menubyte = menubyte + 1
end if
if keyin > 35 then
menubyte = menubyte - 1
end if

#ende
if menubyte = 1 then
lcd.Init
lcd.clear
lcd.pos 1, 1
lcd.print "Menue 1"
lcd.off
end if

if menubyte = 2 then
lcd.Init
lcd.clear
lcd.pos 1, 1
lcd.print "Menue 2"
lcd.off
end if

if menubyte = 3 then
lcd.Init
lcd.clear
lcd.pos 1, 1
lcd.print "Menue 3"
lcd.off
end if

goto byterechnung


Jemand ne Idee ??

Stromi
15.08.2007, 23:23
Warum nicht,
muss ja nicht so schnell sein. So wie man eine Uhr stellt.

Gock
16.08.2007, 09:31
Ganz einfach: die Aktion sollte nicht ausgeführt werden, wenn der Taster gedrückt wird, sondern erst, nachdem er wieder losgelassen wurde. Dazu gibt es im Wiki einen Artikel über "Tasten entprellen", sogar mit Programmbeispiel.
Sieh da mal nach.
Gruß

Driona
17.08.2007, 08:58
Irgendwie bin ich zu blöd zum suchen...
Gib mal bitte nen Tip

Dierk
17.08.2007, 09:39
Du könntest das einfach mit einem do loop machen

if keyin = 34 then
Do
Loop Until keyin<>34 'Loop solange Taste gedrückt
menubyte = menubyte + 1
end if

Gock
17.08.2007, 10:19
Ei ei!
ZB hier:
https://www.roboternetz.de/wissen/index.php/Taster-Abfrage_in_C

Driona
17.08.2007, 10:56
Ei ei!
ZB hier:
https://www.roboternetz.de/wissen/index.php/Taster-Abfrage_in_C

Hmm... C-Control heisst aber nicht Programmiersprache C sondern Conrad....

Und der Teil hier

#include "taster.h"

volatile signed char taster = NO_TASTER;

taste_t tasten[NUM_TASTER];

void get_taster (const unsigned char num, unsigned char tast)
sieht eher nach C aus, statt nach CCbasic oder Basic++

Driona
17.08.2007, 11:49
@Dierk

Super Idee !! Hat bestens geklappt.

Hab den Teil jetzt so geändert:

#byterechnung
if keyin = 50 then
Do
Loop Until keyin<>50 'Loop solange Taste 2 gedrückt
menubyte = menubyte + 1
end if

if keyin = 34 then
Do
Loop Until keyin<>34 'Loop solange Taste 1 gedrückt
menubyte = menubyte - 1
end if

Und hab ganz unten noch das hier eingefügt:

if menubyte = 4 then
menubyte = 1
end if
damit er, wenn er bis 4 hochgezählt hat, wieder in Menübildschirm 1 springt...

Nur wenn ich dann von Menü 1 runterzähle, komme ich eigentlich bei menubyte = 0 an... macht er aber nicht... sondern bleibt bei 1 (Menue 1) stehen...

Wenn ich noch ne Schleife

if menubyte = 0 then
menubyte = 4
end if
einbaue, springt er natürlich von Start an direkt in Menü 1...

Also wurde das ganze jetzt wie folgt umgebaut...

define Pot1 ad[1]
define Pot2 ad[2]
define Pot3 ad[3]
define Pot4 ad[4]
define keyin ad[8]
define menubyte as byte
define Licht port[16]

#start
menubyte = 1
Licht = off

lcd.Init
lcd.clear
lcd.pos 1, 1
lcd.print "DRIONA C-Control"
lcd.pos 2, 1
lcd.print ".....please wait"
lcd.off
pause 200

#byterechnung
if keyin = 50 then
Do
Loop Until keyin<>50 'Loop solange Taste 2 gedrückt
menubyte = menubyte + 1
end if

if keyin = 34 then
Do
Loop Until keyin<>34 'Loop solange Taste 1 gedrückt
menubyte = menubyte - 1
end if

#menue
if menubyte = 1 then
lcd.Init
lcd.clear
lcd.pos 1, 1
lcd.print "Menue 1"
lcd.pos 2, 1
lcd.print "Analog 1 = " & Pot1
lcd.off
end if

if menubyte = 2 then
lcd.Init
lcd.clear
lcd.pos 1, 1
lcd.print "Menue 2"
lcd.pos 2, 1
lcd.print "Analog 2 = " & Pot2
lcd.off
end if

if menubyte = 3 then
lcd.Init
lcd.clear
lcd.pos 1, 1
lcd.print "Menue 3"
lcd.pos 2, 1
lcd.print "Analog 3 = " & Pot3
lcd.off
end if

if menubyte = 4 then
lcd.Init
lcd.clear
lcd.pos 1, 1
lcd.print "Menue 4"
lcd.pos 2, 1
lcd.print "Analog 4 = " & Pot4
lcd.off
end if

if menubyte = 0 then
menubyte = 4
end if

if menubyte = 5 then
menubyte = 1
end if

goto byterechnung

Somit Zeigt er am Anfang den Text.... und springt dann in Menü 1.
Ab hier kann ich mit "vorwärts" (Taste 2) und rückwärts (Taste 1) durch die Menüs blättern...

Dierk
17.08.2007, 14:07
Hi,
das lcd.clear und lcd.pos 1, 1 nach lcd.Init kannst Du weglassen.
lcd.init macht auch gleich ein lcd.clear und positioniert gleich den Cursor an 1,1.

Gruss