LCD MENÜ - aktuellen Menüpunkt speichern

OP #1603893
Lesenswert?
• ▲
▼
Ich möchte gerne in meiner Menüstruktur den aktuell angesprungenen 
Untermenüpunkt ins EEPROM speichern.
Sodas beim nächsten Aufruf das LCD automatisch in diese Option springt.

Wie würdet ihr das anstellen?
Gibt es eine Möglichkeit die aktuelle Position in einer Tabelle 
auszulesen?

Oder muß ich dazu einen weiteren Wert in meine Tabelle inkludieren der 
mittels einer Zahl die aktuelle Menüposition ausgibt?

Die Struktur sieht momentan so aus:
1
typedef struct def_menustruktur
2
{
3
  const char *text;
4

5
  unsigned char next;
6
  unsigned char previous;
7
  unsigned char sub;
8
  unsigned char up;
9

10
  unsigned char ActionCode;
11
  unsigned char ActionValue;
12
}menustruktur;
13

14
menustruktur menu[] PROGMEM = 
15
{
16
  {menu_100, 11, 0, 2, 0, NO_ACTION, DEF_KEY_VALUE},
17
  {menu_101, 1, 1, 1, 1, NO_ACTION, 0},
18
    {menu_102, 3, 2, 0, 0, DEF_KEY_ACTION, 0},
19
    {menu_103, 4, 2, 0, 0, DEF_KEY_ACTION, 1},
20
    {menu_104, 5, 3, 0, 0, DEF_KEY_ACTION, 2},
21
    {menu_105, 6, 4, 0, 0, DEF_KEY_ACTION, 3},
22
    {menu_106, 7, 5, 0, 0, DEF_KEY_ACTION, 4},
23
    {menu_107, 8, 6, 0, 0, DEF_KEY_ACTION, 5},
24
    {menu_108, 9, 7, 0, 0, DEF_KEY_ACTION, 6},
25
    {menu_109, 10, 8, 0, 0, DEF_KEY_ACTION, 7},
26
    {menu_110, 10, 9, 0, 0, DEF_KEY_ACTION, 8},
27
  {menu_200, 23, 0, 13, 11, NO_ACTION, DEF_REPEAT_VALUE},
28
  {menu_201, 12, 12, 12, 12, NO_ACTION, 0},
29
    {menu_202, 14, 13, 11, 11, DEF_REPEAT_ACTION, 0},
30
    {menu_203, 15, 13, 11, 11, DEF_REPEAT_ACTION, 12},
31
    {menu_204, 16, 14, 11, 11, DEF_REPEAT_ACTION, 11},
32
    {menu_205, 17, 15, 11, 11, DEF_REPEAT_ACTION, 10},
33
    {menu_206, 18, 16, 11, 11, DEF_REPEAT_ACTION, 9},
34
    {menu_207, 19, 17, 11, 11, DEF_REPEAT_ACTION, 8},
35
    {menu_208, 20, 18, 11, 11, DEF_REPEAT_ACTION, 7},
36
    {menu_209, 21, 19, 11, 11, DEF_REPEAT_ACTION, 6},
37
    {menu_210, 22, 20, 11, 11, DEF_REPEAT_ACTION, 5},
38
    {menu_211, 22, 21, 11, 11, DEF_REPEAT_ACTION, 4},
39
  {menu_300, 36, 11, 25, 23, NO_ACTION, DEF_LCD_VALUE},
40
  {menu_301, 24, 24, 24, 24, NO_ACTION, 0},
41
    {menu_302, 26, 25, 23, 23, LCD_ACTION, 0},
42
    {menu_303, 27, 25, 23, 23, LCD_ACTION, 25},
43
    {menu_304, 28, 26, 23, 23, LCD_ACTION, 50},
44
    {menu_305, 29, 27, 23, 23, LCD_ACTION, 75},
45
    {menu_306, 30, 28, 23, 23, LCD_ACTION, 100},
46
    {menu_307, 31, 29, 23, 23, LCD_ACTION, 125},
47
    {menu_308, 32, 30, 23, 23, LCD_ACTION, 150},
48
    {menu_309, 33, 31, 23, 23, LCD_ACTION, 175},
49
    {menu_310, 34, 32, 23, 23, LCD_ACTION, 200},
50
    {menu_311, 35, 33, 23, 23, LCD_ACTION, 225},
51
    {menu_312, 35, 34, 23, 23, LCD_ACTION, 255},
52
  {menu_400, 40, 23, 38, 36, NO_ACTION, DEF_LED_VALUE},
53
  {menu_401, 37, 37, 37, 37, NO_ACTION, 0},
54
    {menu_402, 39, 38, 36, 36, LED_ACTION, 1},
55
    {menu_403, 39, 38, 36, 36, LED_ACTION, 0},
56
  {menu_500, 41, 36, 40, 40, SAVE_ACTION, 0},
57
  {menu_600, 41, 40, 41, 41, EXIT_ACTION, 0}
58
};

Meine erste Überlegung war das ganze einfach so auszulesen:
1
indexTasten = menu_index;
Damit wird der aktuelle Menüpunkt gespeichert.

Die Variable menu_index wird laufend bei Tastendruck (navigation durchs 
Menü) aktualisiert:
1
      if(get_key_short(1<<KEY0))                          // kurzer Tastendruck (PinD.0)
2
      {
3
        menu_index = pgm_read_word(&menu[menu_index].next);            // zum nächsten Menüeintrag
4

5
        lcd_gotoxy(0,1);
6
        lcd_puts_p((PGM_P)pgm_read_word(&menu[menu_index].text));

Nur wie spring ich jetzt beim aufruf des Untermenüs eines hauptmenüs 
gleich in den gespeicherten Wert?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.