-         
Ergebnis 1 bis 6 von 6

Thema: einfaches menü erstellen

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    30
    Beiträge
    380

    einfaches menü erstellen

    Anzeige

    servus ich will für meinen wecker ein einfaches menü erstellen. bestehend aus mp3, radio und aux.

    das ganze will ich mit einer taste duchtaben können. bei jedem menü soll 1 ausgange gesetzt werden. das ganze will ich an einem 16x2 lcd display ausgeben.
    wie gehe ich da vor?

    es soll wirklich simpel sein. ich drücke drauf mp3 erscheint zb dann drücke ich nochmal drauf mp3 verschwindet und radio erscheint, dann nochmal radio verschwindet aux erscheint und dann wieder von vorne.

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    38
    Beiträge
    642
    Ich würde es so machen das mit jedem Tastendruck eine Variable hochgezählt wird (if taste gedrückt then incr A). Jetzt kannst du einfach den "Zählerstand" mit If oder Case Anweisungen abfragen und entsprechende Aktionen ausfühen und im LCD einen dazu passenden Text anzeigen lassen.

    If A = 1 then
    LCD "Radio"
    portx.1 =1
    else
    portx.1 =0
    end if

    If A = 2 then
    LCD "MP3 "
    Portx.2 =1
    else
    portx.2=0
    end if

    usw.

    (Musst allerdings die Variable Begrenzen und zurücksetzen damit du nicht bis 255 oder noch weiter hochzählst)

    Gruß

    Neutro
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    30
    Beiträge
    380
    weiß jetzt ehrlich gesagt überhaupt nicht wie ich da rann gehen soll. hab das ganze mal versucht mit timer0 hinzubekommen aber irgendwie will der einfach net meine tastendrücke zählen. denke aber dass meine strucktur schon gar nicht stimmt. kann mir jemand helfen?

    Code:
    $regfile = "m8def.dat"
    $crystal = 1000000
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
    Config Lcdbus = 4
    Cursor Off
    Ddrb = &B11111111
    Ddrd = &B00000000
    Portd.1 = 1
    
    On Timer0 Ontimer0
    Config Timer0 = Counter , Edge = Falling
    Enable Timer0
    Enable Interrupts
    
    Timer0 = 253
    
    
    Do
    If Pind.1 = 1 Then
    Wait 1
    Locate 2 , 1
    Lcd "mp3"
    End If
    
    If Pind.1 = 2 Then
    Wait 1
    Locate 2 , 1
    Lcd "AUX"
    End If
    Loop
    
    Ontimer0:
    Timer0 = 253
    
    Return

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Verstehst Du Deinen Code?

    Hier mal eine Möglichkeit von vielen:
    Code:
    $regfile = "m8def.dat"
    $crystal = 1000000
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
    Config Lcdbus = 4
    Cursor Off
    Ddrb = &B11111111
    Ddrd = &B00000000
    
    const entprellzeit = 2
    dim Modus as byte
    dim Variablen as byte
    Tastelosgelassen Alias Variablen.0
    mTaste Alias pind.1
    set Portd.1
    
    Do
    If mTaste = 0 Then
       if tastelosgelassen = 0 then
          set tastelosgelassen
          gosub moduschange
       end if
    else ' Entprellen
       if tastelosgelassen = 1 then
          reset tastelosgelassen
          waitms entprellzeit
       end if
    end if
    
    Loop
    end
    
    ModusChange:
       incr modus
       if modus=4 then modus=0
       locate 2,1
       if modus = 0 then
          lcd "mp3"
       end if
       if modus = 1 then
          lcd "aux"
       end if
       if modus = 3 then
          lcd "Radio"
       end if
    return
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    30
    Beiträge
    380
    naja ich komm mit den befehlen nicht so klar. weiß nicht wie ich es strukturieren muss.

    deine do schleife verstehe ich auch nicht ganz was hat es mit den ganzen tasterlosgelassen auf sich?

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Das ist zur Entprellung und das der Taster einmal losgelassen sein muss, damit wieder der Modus hochgezählt wird. Sonst würde doch der Modus wahnsinnig schnell durchlaufen. Und von einem Wait 1 als Entprellung halte ich nicht viel, da dann auch der Rest des Programmes angehalten wird.
    Wenn Du mit dem Programmieren erst angefangen hast, solltest Du zu jedem Befehl, den Du einsetzt mal die Hilfe durchlesen.

    Mein Code ist mit Sicherheit auch nicht perfekt und nur eine Möglichkeit von Vielen. Jeder hat seinen eigenen Stil und wird, wie ich auch, die selbe Aufgabe mal so und mal so lösen. Bei meinem Beispielcode können Leerzeichen hinter mp3 und aux nicht schaden, da Radio 2 ZEichen länger ist und das io ständig angezeigt werden würde. Allerdings habe ich das Programm schnell aus dem Kopf erstellt und ungetestet eingestellt.
    Du brauchst auch nicht pauschal die Stacks auf 100 setzen. Schadet natürlich nicht, wenn genug Speicher vorhanden ist. Bei vielen Variablen und Texten kann es aber nötig sein, die Größen anzupassen.
    Ich arbeite viel mit Gosub, Return und Interrupts. Dazu sind HWStacks nötig. Deklarierte Subs und Funktionen benötigen je nach den Parametern SWStack und Frame.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Berechtigungen

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