- LiFePO4 Speicher Test         
Ergebnis 1 bis 9 von 9

Thema: Menü-Programmierung

  1. #1
    Benutzer Stammmitglied Avatar von Driona
    Registriert seit
    01.08.2007
    Ort
    Meckenheim
    Alter
    49
    Beiträge
    45

    Menü-Programmierung

    Anzeige

    Praxistest und DIY Projekte
    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:
    Code:
    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 ??

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Warum nicht,
    muss ja nicht so schnell sein. So wie man eine Uhr stellt.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.112
    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ß

  4. #4
    Benutzer Stammmitglied Avatar von Driona
    Registriert seit
    01.08.2007
    Ort
    Meckenheim
    Alter
    49
    Beiträge
    45
    Irgendwie bin ich zu blöd zum suchen...
    Gib mal bitte nen Tip

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    16.09.2004
    Ort
    Schwabenland
    Beiträge
    156
    Du könntest das einfach mit einem do loop machen
    Code:
    if keyin = 34 then
      Do 
      Loop Until keyin<>34  'Loop solange Taste gedrückt
      menubyte = menubyte + 1
    end if

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.112

  7. #7
    Benutzer Stammmitglied Avatar von Driona
    Registriert seit
    01.08.2007
    Ort
    Meckenheim
    Alter
    49
    Beiträge
    45
    Hmm... C-Control heisst aber nicht Programmiersprache C sondern Conrad....

    Und der Teil hier
    Code:
    #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++

  8. #8
    Benutzer Stammmitglied Avatar von Driona
    Registriert seit
    01.08.2007
    Ort
    Meckenheim
    Alter
    49
    Beiträge
    45
    @Dierk

    Super Idee !! Hat bestens geklappt.

    Hab den Teil jetzt so geändert:
    Code:
    #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:
    Code:
    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
    Code:
    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...
    Code:
    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...

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    16.09.2004
    Ort
    Schwabenland
    Beiträge
    156
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen