Hallo ich hab vor für ein 16x2LCD eine Art Menü zu schreiben. Aber ich steh etwas auf dem Schlauch was die Programmierung angeht. Das Menü sollte baumförmig aufgebaut sein wobei jeder Menüpunkt mehrere Unterpunkte haben kann. Wie kann ich da am besten vorgehen? (wichtiger Aspekt: möglichst speichersparend) Marten
hab das mal so gemacht (menu mit vier "cursortasten" zum steuern): <c> struct menu_entry { const prog_char * text; const void * left; const void * right; const void * up; const void * down; uint8_t flags; }; </c> dann entsprechend eine Baumstruktur im Flash damit ausfüllen. je nach "flags" waren die "void *" entweder funktionspointer die bei Tastendruck ausgeführt wurden, oder pointer auf das untermenu, in das gesprungen werden sollte. /Ernst
Danke für deine Antwort! Hab noch eine Frage: nehmen wir mal an es gibt nur 2 Menüpunkte 'Display'<->'Einstellungen' Dann würde ich gern einen Ring machen das man wieder am Anfang rauskommt: 'Display'<->'Einstellungen'<->'Display'<->'Einstellungen' usw. aber dazu müsste man ja irgendwie rekursiv die Zeiger setzen .. geht das? Marten
Sicher. Du brauchst dazu eine 'forward Dekleration' struct irgendwas Display; struct irgendwas Einstellungen = { &Display, &Display, ... }; struct irgendwas Display = { &Einstellungen, &Einstellungen, ... };
Hier meine Menü Struktur, so ähnlich wie die oben:
1 | struct menupoint{ |
2 | u08 prev; |
3 | u08 next; |
4 | u08 up; |
5 | u08 down; |
6 | char text[5]; |
7 | void (*execute) (void); |
8 | };
|
9 | |
10 | const struct menupoint mainmenu[menuentries_nr] PROGMEM = { |
11 | {254,5,3,1,"Game\0"}, //0 |
12 | {254,11,0,2,"AdvC\0"}, //1 |
13 | {254,255,1,3,"Cali\0",input_calib}, //2 |
14 | {254,255,2,0,"Demo\0",play_demo}, //3 |
15 | |
16 | }
|
Es gibt also immer eine Nummer die sagt welche Menüeintrag bei welchem Button folgen soll. Dabei steht 254 für nicht auswählbar und 255 fürs Ausführen der Routine.
Hallo Ich habe ein Menüsystem geschrieben für eine 7 Segment Anzeige. ( mit Änderungen auch für andere Anzeigen ). Das Prinzip ist aber gleich. 1. Menüebene -> Auswahl der Liste. 2. Menüebene -> Auswahl der Parameter. Taste +(1) oder -(2) zur navigation ( immer im Kreis herum ) Taset 3 Auswahl Taste 4 Abbruch und eine Ebene zurück. gruß Micha
Danke für eure Hilfe. Hab jetzt schon eine kleine Menüstruktur geschrieben. Ist sogar kleiner geworden als ich angenommen habe. Marten
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.