- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 2 von 2

Thema: tastern steuern

  1. #1

    tastern steuern

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich habe ein 20x4 LCD(DOTmatrix) und 3 Taster mit dem Arduino Atmega1280 angeschlossen.

    1.Taster soll beim drücken den cursor nach oben verschieben und die Zeile selektieren
    2.Taster soll beim drücken den cursor nach unten verschieben und die Zeile selektieren
    3. Beim betätigen des 3.Tasters soll den enthaltenen String in der selektierten Zeile als Funktion aufgerufen und ausgeführt werden.
    Gibt es geiegnete Funktion dafür oder muss man die neu implementieren?

    Im Voraus bedanke ich mich und freue mich schon auf euere Feedback.

    Gruß

  2. #2
    Benutzer Stammmitglied Avatar von KR-500
    Registriert seit
    26.12.2007
    Alter
    29
    Beiträge
    91
    Hi,

    so wie es sich anhört möchtest du ein Menü erstellen. Hier: http://www.mikrocontroller.net/topic/11266 wurde ein Menü für ein LCD erstellt. Dabei legt man als erstes einen typedef an z.B. den hier:
    Code:
    typedef struct MENU {
      unsigned char *text;
      uint8_t previous;
      uint8_t next;
      uint8_t stage;
      void ( *fp )( void );
    } MENU_ENTRY;
    Danach kann man ein Array mit den Menüpunkten erstellen:

    Code:
    MENU_ENTRY menue[] = {
    
      { "Menue1", 33, 12, 1, fkt1},                          
            { "Untermenue1", 11, 6, 2, fkt2},                      
                    { "Untermenue2", 5, 4, 2, fkt2},                        
                    {  "Untermenue2", 2, 4, 3, fkt2},                          
                    {  "Untermenue2", 2, 5, 0, fkt2},                   
                    {  "Untermenue2" 4, 2, 5, fkt2},                     
            {  "Untermenue1", 1, 7, 2, fkt2 },                        
            {  "Untermenue1", 6, 8, 2, fkt2 },                           
            {  "Untermenue1", 7, 9, 2, fkt2},                          
            {  "Untermenue1", 8, 10, 2, fkt2},                      
            {  "Untermenue1", 9, 11, 0, fkt2 },                             
            {  "Untermenue1", 10, 1, 11, fkt2},                                  
        
     };
    Das ist dann die Menüstruktur, die Zahlen stimmen nich ganz aber ansonsten kann das so aussehen. Ich hatte damals ein 2zeiliges LCD und einen Drehencoder, und dann sah das main Programm so aus.

    Code:
    void fkt1 (void){
    
    }
    
    void fkt2 (void){
    
    }
    
    int main (void){
    
        init();
        
        uint8_t menue_counter=0;
        uint8_t draw = 0;
    
        while(1){
            if(enc_delta>0){
                menue_counter=menue[menue_counter].next;
                        draw=1;
                        enc_delta=0;
            }
            else if (enc_delta<0){
                menue_counter=menue[menue_counter].previous;
                        draw=1;
                        enc_delta=0;
            }
    
            if(!(PIND & (1<<PD4))){
                _delay_ms(200);
                menue[menue_counter].fp();
                menue_counter=menue[menue_counter].stage;
                draw=1;
            }
    
            if(draw){
                lcd_string((char *)menue[menue_counter].text);
                set_cursor(1,2);
                lcd_string((char *) menue[menue[menue_counter].next].text);
                set_cursor(1,1);
                draw = 0;
            }
     
        }
    
    
    
        return 0;
    
    }
    Wenn also der Encoder betätigt wird, dann wird eine neue Zeile geladen und wenn der "Enter-Knopf" gedrückt wird dann wird gegebenen falls ein String aus dem Untermenü geladen und die entsprechende Funktion ausgeführt.

    KR-500
    Geändert von KR-500 (24.03.2011 um 14:42 Uhr)

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad