- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 7 von 7

Thema: LCD Menü Struktur

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.08.2009
    Beiträge
    30

    LCD Menü Struktur

    Anzeige

    E-Bike
    Ich möchte mir gerne ein simples LCD-Menü erstellen.
    In den meisten Infos die ich gesammelt habe wird erwähnt das man das am besten mittels Pointer realisiert.

    Diesbezüglich habe ich mir mal folgendes zusammengestellt:

    Code:
    // LCD-Menüeinträge definieren
    // ===========================
    const char menu_000[] PROGMEM = " Multifunktions ";	// 0
    const char menu_001[] PROGMEM = "ArcadeController";	// 1
    const char menu_002[] PROGMEM = "** HAUPTMENUE **";	// 2
    const char menu_100[] PROGMEM = "Tastenzuordnung>";	// 3
    const char menu_101[] PROGMEM = "[X        ]    1";	// 4
    const char menu_102[] PROGMEM = "[XX       ]    2";	// 5
    const char menu_103[] PROGMEM = "[XXX      ]    3";	// 6
    const char menu_104[] PROGMEM = "[XXXX     ]    4";	// 7
    const char menu_105[] PROGMEM = "[XXXXX    ]    5";	// 8
    const char menu_106[] PROGMEM = "[XXXXXX   ]    6";	// 9
    const char menu_107[] PROGMEM = "[XXXXXXX  ]    7";	// 10
    const char menu_108[] PROGMEM = "[XXXXXXXX ]    8";	// 11
    const char menu_109[] PROGMEM = "[XXXXXXXXX]    9";	// 12
    const char menu_200[] PROGMEM = "<Dauerfeuer    >";	// 13
    const char menu_201[] PROGMEM = "[         ]    0";	// 14
    const char menu_202[] PROGMEM = "[X        ]    1";	// 15
    const char menu_203[] PROGMEM = "[XX       ]    2";	// 16
    const char menu_204[] PROGMEM = "[XXX      ]    3";	// 17
    const char menu_205[] PROGMEM = "[XXXX     ]    4";	// 18
    const char menu_206[] PROGMEM = "[XXXXX    ]    5";	// 19
    const char menu_207[] PROGMEM = "[XXXXXX   ]    6";	// 20
    const char menu_208[] PROGMEM = "[XXXXXXX  ]    7";	// 21
    const char menu_209[] PROGMEM = "[XXXXXXXX ]    8";	// 22
    const char menu_210[] PROGMEM = "[XXXXXXXXX]    9";	// 23
    const char menu_300[] PROGMEM = "<System        >";	// 24
    const char menu_301[] PROGMEM = "LCD            >";	// 25
    const char menu_302[] PROGMEM = "<LED-Test       ";	// 26
    const char menu_400[] PROGMEM = "<Speichern     >";	// 27
    const char menu_500[] PROGMEM = "<Beenden        ";	// 28
    
    
    typedef struct def_menustruktur
    {
    	const unsigned char *text;
    	struct def_menustruktur* next;
    	struct def_menustruktur* previous;
    	struct def_menustruktur* sub;
    	struct def_menustruktur* up;
    	void (*funktion)(void);
    }menustruktur;
    
    void tastenzuordnung(void);
    void dauerfeuer(void);
    void lcd(void);
    void led(void);
    void speichern(void);
    void beenden(void);
    
    // Tabelle von Zeigern auf die Texte erstellen
    // ===========================================
    menustruktur menu[] PROGMEM =
    {
     	{menu_100, 13, 3, 4, 3, },
    	  	{menu_101, 5, 4, 3, 3, tastenzuordnung},
    	  	{menu_102, 6, 4, 3, 3, tastenzuordnung},
    	  	{menu_103, 7, 5, 3, 3, tastenzuordnung},
    	  	{menu_104, 8, 6, 3, 3, tastenzuordnung},
    	  	{menu_105, 9, 7, 3, 3, tastenzuordnung},
    	  	{menu_106, 10, 8, 3, 3, tastenzuordnung},
    	  	{menu_107, 11, 9, 3, 3, tastenzuordnung},
    	  	{menu_108, 12, 10, 3, 3, tastenzuordnung},
    	  	{menu_109, 12, 11, 3, 3, tastenzuordnung},
    	{menu_200, 24, 13, 14, 13, },
    		{menu_201, 15, 14, 13, 13, dauerfeuer},
    		{menu_202, 16, 14, 13, 13, dauerfeuer},
    		{menu_203, 17, 15, 13, 13, dauerfeuer},
    		{menu_204, 18, 16, 13, 13, dauerfeuer},
    		{menu_205, 19, 17, 13, 13, dauerfeuer},
    		{menu_206, 20, 18, 13, 13, dauerfeuer},
    		{menu_207, 21, 19, 13, 13, dauerfeuer},
    		{menu_208, 22, 20, 13, 13, dauerfeuer},
    		{menu_209, 23, 21, 13, 13, dauerfeuer},
    		{menu_210, 23, 22, 13, 13, dauerfeuer},
    	{menu_300, 27, 24, 25, 24,},
    		{menu_301, 26, 25, 24, 24, lcd},
    		{menu_302, 26, 25, 24, 24, led},
    	{menu_400, 28, 27, 27, 27, speichern},
    	{menu_500, 28, 27, 28, 28, beenden}
    };
    So ganz funktioniert das leider noch nicht.
    Kann mir da jemand weiterhelfen?

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    menustruktur enthält Zeiger, die Initialisierungswerte sehen aber nach Indizes aus. Du musst dich schon entscheiden, mit was von beidem du nun eigentlich arbeiten willst.
    MfG
    Stefan

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    24.08.2009
    Beiträge
    30
    Zitat Zitat von sternst
    menustruktur enthält Zeiger, die Initialisierungswerte sehen aber nach Indizes aus. Du musst dich schon entscheiden, mit was von beidem du nun eigentlich arbeiten willst.
    Danke für den Hinweis.
    Habs jetzt so definiert:

    Code:
    typedef struct def_menustruktur
    {
    	char * text;
    	unsigned char next;
    	unsigned char previous;
    	unsigned char sub;
    	unsigned char up;
    	void (*funktion)(void);
    }menustruktur;
    Jetzt meckert er jedoch bei der Menüstrucktur.

    ../main.c:137: warning: initialization discards qualifiers from pointer target type

    Was ist da wieder faul?

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    char *text;
    ->
    const char *text;
    MfG
    Stefan

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    24.08.2009
    Beiträge
    30
    Danke.

    Programm läuft nun soweit.
    Warum bekomm ich bei

    Code:
    lcd_puts_p(pgm_read_word(&menu[menu_index].text));
    Code:
    ../main.c:308: warning: passing argument 1 of 'lcd_puts_p' makes pointer from integer without a cast
    Und dann würde ich gerne noch wissen wie man in der Struktur:

    Code:
    typedef struct def_menustruktur
    {
    	const char *text;
    	unsigned char next;
    	unsigned char previous;
    	unsigned char sub;
    	unsigned char up;
    	void (*funktion)(void);
    }menustruktur;
    die Funktion anspricht.

    Oder wird die automatisch aufgerufen wenn der entsprechende Menüpunkt angewählt wird?

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2006
    Beiträge
    184
    Hi,

    die Struktur enthält keine Funktion sondern einen Funktionspointer.


    Aufruf geht ungefähr so...
    Code:
    menustruktur.funktion();
    gruß

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    30
    Beiträge
    656
    Aufruf geht ungefähr so...
    Code:menustruktur.funktion();
    Wobei du dem Zeiger erst mal eine Funktion zuweisen musst:
    Code:
    void eineFunktion(void)
    {
    //...
    }
    //...
    void main()
    {
    //...
    menustruktur.funktion = eineFunktion; //Zuweisung
    menustruktur.funktion(); //ruft jetzt eineFunktion auf
    //...
    }
    mfg
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

Berechtigungen

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

Solar Speicher und Akkus Tests