-         

Ergebnis 1 bis 3 von 3

Thema: Kleine Menuesteuerung

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    47
    Beiträge
    2.556

    Kleine Menuesteuerung

    Anzeige

    Bin gerade wieder ein bisschen bei meinem WinampTerminal bei und dabei ist vorerste eine kleine Menuesteuerung "abgefallen"

    Zur Steuerung habe ich einen kleinen Minijoystick mit zwei kleinen Potis und einem Taster aus einem PS-Pad, man braucht daher nur 3 Eingänge für 4 Richtungsfunktionen und einer Tasterfunktion. Als Anzeige habe ich ein 4x16 Display. Als Board benutze ich derzeit das MyAvr.

    Man scrollt hier einfach mit Up/down durch eine beliebig erweiterbare Anzahl von Menues und kann dort dann weitere Aktionen steuern.




    Ist sicherlich nicht optimal programmiert, funktioniert aber :
    Code:
    $regfile = "m8def.dat"
    $crystal = 3686400
    Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
    Config Lcd = 16 * 4
    Initlcd
    Cursor Off
    
    
    Config Portd = Output                                       'LED o.Ä. an Port D
    Config Portc = Input                                        'Eingänge an Port C
    
    'Taster an Port C.5
    'Poti 1 an Port C.0
    'Poti 2 an Port C.1
    
    
    Dim W As Word                                               'adc horizontal
    Dim X As Word                                               'adc vertikal
    Dim R As Bit                                                'rechts
    Dim L As Bit                                                'links
    Dim O As Bit                                                'oben
    Dim U As Bit                                                'unten
    Dim T As Bit                                                'taste
    Dim Z As Byte                                               'seitenzähler
    
    
    
    Config Timer1 = Timer , Prescale = 64                       'Interrupt wird erzeugt, springt 10x pro Sekunde nach Timer_irq
    On Timer1 Timer_irq
    Const Timervorgabe = 53036
    Enable Timer1
    Enable Interrupts
    
    Cls                                                         'Hauptschleife für Hauptmenue
    Do
       Locate 1 , 1
       Lcd "Waehlen sie :"
       Locate 2 , 1
       Lcd "(Up/down)"
       Locate 3 , 1
    
    
       If O = 1 Then Incr Z                                     'wenn Poti nach oben, erhöhe Seitenzähler
       If U = 1 Then Decr Z                                     'wenn Poti nach unten, verringere Seitenzähler
    
    
       If Z = 1 Then Gosub Menue1                               'springe je nach Zählstand
       If Z = 2 Then Gosub Menue2
       If Z = 3 Then Gosub Menue3
       If Z = 4 Then Gosub Menue4
       If Z > 4 Then Z = 0                                      'Zähler fängt bei > Menue 4 wieder vorne an
       Waitms 300
    Loop
    End
    
    
    Timer_irq:
      Timer1 = Timervorgabe
    
      Config Adc = Single , Prescaler = Auto
      Start Adc
    
      W = Getadc(0)                                             'Analogwerte werden eingelesen für "Taste" oben/unten
      If W > 700 Then L = 1 Else L = 0
      If W < 300 Then R = 1 Else R = 0
    
      X = Getadc(1)                                             'Analogwerte werden eingelesen für "Taste" links/rechts
      If X > 700 Then O = 1 Else O = 0
      If X < 300 Then U = 1 Else U = 0
    
      If Pinc.5 = 0 Then T = 1 Else T = 0                       'taster wird eingelesen und "T" auf dessen Zustand gesetzt
    Return
    
    
    
    Menue1:                                                     'Hier werden die Menues angesprungen
    Cls
    Do
       Locate 1 , 1
       Lcd "Menue 1"
       Locate 2 , 1
       Lcd "Das erste Menue"
    Loop Until O = 1 Or U = 1                                   'loop bis oben/unten betätigt, springe dann zurück
    Return
    
    Menue2:
    Cls
    Do
       Locate 1 , 1
       Lcd "Menue 2"
       Locate 2 , 1
       Lcd "Das zweite"
    Loop Until O = 1 or U=1
    Return
    
    Menue3:
    Cls
    Do
       Locate 1 , 1
       Lcd "Menue 3"
       Locate 2 , 1
       Lcd "Noch Eines"
    Loop Until O = 1 or U=1
    Return
    
    Menue4:
    Cls
    Do
       Locate 1 , 1
       Lcd "Menue 4"
       Locate 2 , 1
       Lcd "Und Schliesslich"
    Loop Until O = 1 Or U = 1
    Return
    Danke an Alle, die uns bei der erfolgreichen 1.000€-Aktion der IngDiba unterstützt haben! | https://www.hackerspace-bremen.de | http://www.pixelklecks.de |

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    47
    Beiträge
    2.556
    Hier mal ein Beispiel für einen Menuepunkt - z.B. Volume :



    Code:
    Menue1:                                                     angesprungen
    dim V as byte                                             ' variable Volume
    
    Cls
    If V > 99 Then V = 50                                 'beim ersten Anschalten auf max. Wert 50
    Do
       Locate 1 , 1
       Lcd "Menue 1"
       Locate 2 , 1
       Lcd "Volume : " ; V ; " %"
       If L = 1 Then Decr V                                     'wenn Poti nach rechts, erhöhe Volume
       If R = 1 Then Incr V                                     'wenn Poti nach links, verringere Volume
       If V > 99 Then V = 99
       If L = 1 Or R = 1 Then                                   'wenn R/L betätigt, dann gib Wert über RS232
       Print "volume" ; V
       End If
       Loop Until O = 1 Or U = 1                                'loop bis oben/unten betätigt, springe dann zurück
    Return
    Danke an Alle, die uns bei der erfolgreichen 1.000€-Aktion der IngDiba unterstützt haben! | https://www.hackerspace-bremen.de | http://www.pixelklecks.de |

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    12.03.2005
    Beiträge
    33
    hallo andree!

    ich finds super, das du dein programm freiwillig veröffentlichst! ich wollte sowas auch schonmal machen.

    falls du weitere änderungen oder andere funktionen einbindest, würde sich die forumgemeinde (und besonders ich *g*) sicherlich darüber freuen, wenn du es hier reinsetzt!


    gruß heinzi

Berechtigungen

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