Forum: Mikrocontroller und Digitale Elektronik C - Menüstruktur


von Jan H. (janiiix3)


Lesenswert?

Halli Hallo,

benötige mal euren Rat / Hilfe!
Habe mir ein "einfaches" Menü gebastelt, mit hilfe von einer Struktur 
(menue_t).
1
typedef struct
2
{
3
  #define MENUE_EXIT    111
4
  
5
  char *name;
6
  uint8_t ( *fnc )( void );
7
  uint8_t menuePos;
8
}menue_t;


Dann erstelle Ich mir ein Array aus dieser Struktur..
1
menue_t menue[] =
2
{
3
  { "Time"  , menueSetTime      , 0    },
4
  { "Date"  , cnfgDate        , 1    },
5
  { "Alarm."  , menueSetAlarm      , 2    },
6
  usw..
7
};

Untermenüs..
1
menue_t menueAlert[]=
2
{
3
  {"-A1"    , NULL      ,  0    },
4
  {"-A2"    , NULL      ,  1    },
5
  {"-A3"    , NULL      ,  2    },
6
  {"-A4"    , NULL      ,  3    },
7
  {"Cycl."  , NULL      ,  4    },
8
  {"Exit"    , NULL      ,  5    },
9
};

Und eine Funktion die mir das ganze auf den Bildschirm wirft..
1
uint8_t openMenue( menue_t *m , size_t size )
2
{
3
  uint8_t index = menueCursor;
4
  
5
  button.all    = 0;
6
  flag.menueOpen  = 1;
7
  menueTimeout  = 0;
8
  
9
  clearDisplay( true , false );
10
  
11
  while (1)
12
  {  
13
    if ( menueTimeout > 500 )
14
    {
15
      menueTimeout = 0;
16
      clearDisplay( true , false );
17
      return MENUE_EXIT;  
18
    }
19
    
20
    if ( button.pressed.up )
21
    {
22
      button.all = 0;
23
      menueTimeout = 0;
24
      clearDisplay( true , false );
25
      if ( index < ( size - 1 ) )
26
      {
27
        index++;
28
      }
29
    }
30
    
31
    if ( button.pressed.down )
32
    {
33
      button.all = 0;
34
      menueTimeout = 0;
35
      clearDisplay( true, false );
36
      if ( index > 0 )
37
      {
38
        index--;
39
      }
40
    }
41
    
42
    if ( button.pressed.exit )
43
    {
44
      button.all = 0;
45
      menueTimeout = 0;
46
      flag.menueExit = 1;
47
      clearDisplay( true , false );
48
      return 111;
49
    }
50
    
51
    putStr( m[index].name , 0 );
52
    
53
    if ( button.pressed.enter )
54
    {
55
      button.all = 0;
56
      menueTimeout = 0;
57
      
58
      clearDisplay( true , false );
59
      
60
      menueCursor = 0;
61
      
62
      if ( m[index].fnc != NULL)
63
      {
64
        m[index].fnc();
65
        menueCursor = m[index].menuePos;    
66
      }
67
      
68
      clearDisplay( true , false );
69
      
70
      menueTimeout = 0;
71
      flag.menueExit = 0;
72
      
73
      return index;
74
    }
75
  }
76
  
77
  flag.menueOpen = 0;
78
  
79
  return 0;
80
}

Funktioniert soweit auch ganz gut. Wenn Ich jetzt in mein Untermenü 
(menueAlert) bin und etwas einstelle, komme Ich nach der Einstellung 
wieder zu meinem "Hauptmenüpunkt" ("Alarm.").

Ab hier stehe Ich auf dem Schlauch. Eigentlich möchte Ich gar nicht 
wieder zu diesem Punkt, sondern in meinem Untermenü bleiben solange bis 
Ich es halt explizit befehle.

Wie stelle Ich das nun am besten an?

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
Noch kein Account? Hier anmelden.