platzsparende Menüstruktur

Gast #367994
Lesenswert?

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
#367995
Lesenswert?

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
Gast #367996
Lesenswert?

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
Persönliche Seite #367998
Lesenswert?

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.
#367999
Lesenswert?

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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren