Forum: Compiler & IDEs Brauche Hilfe bei LCD-Menü (AVR Butterfly)


von Tom H. (dastoem)


Lesenswert?

Hallo Leute,
ich versuche grade auf dem AVR Butterfly ein Menü zu erstellen. Mein 
bisheriger Code:

menu.h
1
/*
2
Menütexte erstellen
3
*/
4
static const char menu_string0[] PROGMEM = "Anfang";
5
static const char menu_string1[] PROGMEM = "Test1";
6
static const char menu_string2[] PROGMEM = "Ende";
7
8
9
/*
10
*/
11
typedef struct MENU{
12
const char *text;
13
14
unsigned char next;
15
unsigned char prev;
16
17
} MENU_ENTRY;
18
19
const MENU_ENTRY menue[] PROGMEM = {
20
21
{menu_string0, 1, 2},
22
{menu_string1, 2, 0},
23
{menu_string2, 0, 2},
24
25
};

Meine main.c
1
int main(void)
2
{    
3
  unsigned char MENU_COUNT=0; //menu entry
4
  char key; //pressed key
5
  char run=TRUE; //Hilfsvariable updatet das LCD-Display
6
7
  
8
  Initialization();
9
  sei(); 
10
  
11
  for (;;)            // Main loop
12
    {
13
    if (run)
14
    {
15
      LCD_puts_f((char *)pgm_read_word (&menue[MENU_COUNT].text), 1); //get current menu entry
16
      LCD_Colon(0);
17
      run = NULL; //only update lcd when key is up-to-date  
18
    }
19
    
20
    key = getkey();
21
    
22
    if (key==KEY_PLUS)
23
    { 
24
      MENU_COUNT=GetPost(MENU_COUNT, TRUE); //get next menu entry
25
      run = TRUE; //update lcd
26
    }
27
      
28
    if (key==KEY_MINUS)
29
    {
30
      MENU_COUNT=GetPost(MENU_COUNT, FALSE); //get previous menu entry
31
      run = TRUE;
32
    }  
33
    
34
        
35
    
36
    } //End Main loop
37
  
38
  return 0;
39
}
40
41
/*********************************************************
42
*
43
*  Function name  :   GetPost
44
*
45
*  Returns  :      POST
46
*
47
*  Parameters  :    CURRENT, MODE
48
*
49
*  Purpose:       Get Next/Previous menu entry
50
*
51
**********************************************************/
52
53
unsigned char GetPost (unsigned char CURRENT, BOOL MODE)
54
{
55
  unsigned char POST;
56
  
57
  if (MODE==TRUE) //get next entry
58
  {  
59
    POST = menue[CURRENT].next;
60
  }
61
  
62
  else      //get previous entry
63
  {
64
    POST = menue[CURRENT].prev;
65
  }
66
  
67
  return POST;
68
}

GCC kompiliert das ganze ohne Probleme, nur leider wird nur der erste 
String ('Anfang') auf dem LCD angezeigt. Bei Drücken des Joysticks ist 
nichts mehr auf dem Display zu sehen.

Hat jemand von euch ne Idee?

von Tom H. (dastoem)


Lesenswert?

Hab meinen Fehler jetzt selbst gefunden:
1
unsigned char GetPost (unsigned char CURRENT, BOOL MODE)
2
{
3
  unsigned char POST;
4
  
5
  if (MODE==TRUE) //get next entry
6
  {  
7
    POST = pgm_read_byte(&menue[CURRENT].next);
8
  }
9
  
10
  else      //get previous entry
11
  {
12
    POST = pgm_read_byte(&menue[CURRENT].prev);
13
  }
14
  
15
  return POST;
16
}

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.