- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Mit Peter Fleury's Lib mittels lcd_puts_p Daten auslesen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.08.2009
    Beiträge
    30

    Mit Peter Fleury's Lib mittels lcd_puts_p Daten auslesen

    Anzeige

    Praxistest und DIY Projekte
    Ich möchte gerne mittels der Funktion lcd_puts_p von Peter Fleury's LCD-Library Daten aus dem Flash auslesen, die ich von verschiedenen Variablen bereitstelle:

    Code:
    const char menu_000[] PROGMEM = " Multifunktions ";	//
    const char menu_001[] PROGMEM = "ArcadeController";	//
    const char menu_002[] PROGMEM = "** HAUPTMENUE **";	//
    
    const char menu_100[] PROGMEM = "Tastenzuordnung ";	// 0
    const char menu_101[] PROGMEM = "[X        ]    1";	// 1
    const char menu_102[] PROGMEM = "[XX       ]    2";	// 2
    const char menu_103[] PROGMEM = "[XXX      ]    3";	// 3
    const char menu_104[] PROGMEM = "[XXXX     ]    4";	// 4
    const char menu_105[] PROGMEM = "[XXXXX    ]    5";	// 5
    const char menu_106[] PROGMEM = "[XXXXXX   ]    6";	// 6
    const char menu_107[] PROGMEM = "[XXXXXXX  ]    7";	// 7
    const char menu_108[] PROGMEM = "[XXXXXXXX ]    8";	// 8
    const char menu_109[] PROGMEM = "[XXXXXXXXX]    9";	// 9
    
    const char menu_200[] PROGMEM = "   Dauerfeuer   ";	// 10
    const char menu_201[] PROGMEM = "[         ]  AUS";	// 11
    const char menu_202[] PROGMEM = "[X        ]    1";	// 12
    const char menu_203[] PROGMEM = "[XX       ]    2";	// 13
    const char menu_204[] PROGMEM = "[XXX      ]    3";	// 14
    const char menu_205[] PROGMEM = "[XXXX     ]    4";	// 15
    const char menu_206[] PROGMEM = "[XXXXX    ]    5";	// 16
    const char menu_207[] PROGMEM = "[XXXXXX   ]    6";	// 17
    const char menu_208[] PROGMEM = "[XXXXXXX  ]    7";	// 18
    const char menu_209[] PROGMEM = "[XXXXXXXX ]    8";	// 19
    const char menu_210[] PROGMEM = "[XXXXXXXXX]    9";	// 20
    
    const char menu_300[] PROGMEM = "  Beleuchtung   ";	// 21
    const char menu_301[] PROGMEM = "[          ] AUS";	// 22
    const char menu_302[] PROGMEM = "[X         ]   1";	// 23
    const char menu_303[] PROGMEM = "[XX        ]   2";	// 24
    const char menu_304[] PROGMEM = "[XXX       ]   3";	// 25
    const char menu_305[] PROGMEM = "[XXXX      ]   4";	// 26
    const char menu_306[] PROGMEM = "[XXXXX     ]   5";	// 27
    const char menu_307[] PROGMEM = "[XXXXXX    ]   6";	// 28
    const char menu_308[] PROGMEM = "[XXXXXXX   ]   7";	// 29
    const char menu_309[] PROGMEM = "[XXXXXXXX  ]   8";	// 30
    const char menu_310[] PROGMEM = "[XXXXXXXXX ]   9";	// 31
    const char menu_311[] PROGMEM = "[XXXXXXXXXX]  10";	// 32
    
    const char menu_400[] PROGMEM = "    LED-Test    ";	// 33
    const char menu_401[] PROGMEM = "  [EIN]   AUS   ";	// 34
    const char menu_402[] PROGMEM = "   EIN   [AUS]  ";	// 35
    
    const char menu_500[] PROGMEM = "   Speichern    ";	// 36
    
    const char menu_600[] PROGMEM = "    Beenden     ";	// 37
    
    
    typedef struct def_menustruktur
    {
    	const char *text;
    
    	unsigned char next;
    	unsigned char previous;
    	unsigned char sub;
    	unsigned char up;
    
    	unsigned char ActionCode;
    	uint8_t ActionValue;
    }menustruktur;
    
    // Tabelle von Zeigern auf die Texte erstellen
    // ===========================================
    menustruktur menu[] PROGMEM = 
    {
    	{menu_100, 10, 0, 1, 0, NO_ACTION, 0},
    		{menu_101, 2, 1, 0, 0, DEF_KEY_ACTION, 1},
    		{menu_102, 3, 1, 0, 0, DEF_KEY_ACTION, 2},
    		{menu_103, 4, 2, 0, 0, DEF_KEY_ACTION, 3},
    		{menu_104, 5, 3, 0, 0, DEF_KEY_ACTION, 4},
    		{menu_105, 6, 4, 0, 0, DEF_KEY_ACTION, 5},
    		{menu_106, 7, 5, 0, 0, DEF_KEY_ACTION, 6},
    		{menu_107, 8, 6, 0, 0, DEF_KEY_ACTION, 7},
    		{menu_108, 9, 7, 0, 0, DEF_KEY_ACTION, 8},
    		{menu_109, 9, 8, 0, 0, DEF_KEY_ACTION, 9},
    	{menu_200, 21, 0, 11, 10, NO_ACTION, 0},
    		{menu_201, 12, 11, 10, 10, DEF_REPEAT_ACTION, 0},
    		{menu_202, 13, 11, 10, 10, DEF_REPEAT_ACTION, 1},
    		{menu_203, 14, 12, 10, 10, DEF_REPEAT_ACTION, 2},
    		{menu_204, 15, 13, 10, 10, DEF_REPEAT_ACTION, 3},
    		{menu_205, 16, 14, 10, 10, DEF_REPEAT_ACTION, 4},
    		{menu_206, 17, 15, 10, 10, DEF_REPEAT_ACTION, 5},
    		{menu_207, 18, 16, 10, 10, DEF_REPEAT_ACTION, 6},
    		{menu_208, 19, 17, 10, 10, DEF_REPEAT_ACTION, 7},
    		{menu_209, 20, 18, 10, 10, DEF_REPEAT_ACTION, 8},
    		{menu_210, 20, 19, 10, 10, DEF_REPEAT_ACTION, 9},
    	{menu_300, 33, 10, 22, 21, NO_ACTION, 0},
    		{menu_301, 23, 22, 21, 21, LCD_ACTION, 0},
    		{menu_302, 24, 22, 21, 21, LCD_ACTION, 25},
    		{menu_303, 25, 23, 21, 21, LCD_ACTION, 50},
    		{menu_304, 26, 24, 21, 21, LCD_ACTION, 75},
    		{menu_305, 27, 25, 21, 21, LCD_ACTION, 100},
    		{menu_306, 28, 26, 21, 21, LCD_ACTION, 125},
    		{menu_307, 29, 27, 21, 21, LCD_ACTION, 150},
    		{menu_308, 30, 28, 21, 21, LCD_ACTION, 175},
    		{menu_309, 31, 29, 21, 21, LCD_ACTION, 200},
    		{menu_310, 32, 30, 21, 21, LCD_ACTION, 225},
    		{menu_311, 32, 31, 21, 21, LCD_ACTION, 255},
    	{menu_400, 36, 21, 34, 33, NO_ACTION, 0},
    		{menu_401, 35, 34, 33, 33, LED_ACTION, 0},
    		{menu_402, 35, 34, 33, 33, LED_ACTION, 1},
    	{menu_500, 37, 33, 36, 36, SAVE_ACTION, 1},
    	{menu_600, 37, 36, 37, 37, EXIT_ACTION, 1}
    };
    
    unsigned char menu_index = 0;
    Wenn ich jetzt versuche das ganze mittels:

    Code:
    menu_index = menu[menu_index].up;
    lcd_puts_p(menu[menu_index].text);
    auszulesen bekomme ich nur verstümmelte Zeichen.
    Ich vermute das der Fehler bei einer falschen deklaration einer Variable liegt. Nur ich finde den Fehler nicht.
    Laut der Funktion lcd_puts_p müssen die Werte ein const char sein.
    Was bei mir ja auch zutrifft, oder nicht?

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Ich dachte eigentlich, du hättest längst mitbekommen, dass man Daten aus dem Flash mit den dafür vorgesehen Funktionen lesen muss.
    MfG
    Stefan

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    24.08.2009
    Beiträge
    30
    Und was ist an der Funktion lcd_puts_p falsch?

    "print string from program memory on lcd"

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Und was ist mit menu[menu_index].up? Wo ist das gespeichert?
    Und was ist mit dem Pointer, den du an die Funktion übergibst? Wo ist der gespeichert?
    MfG
    Stefan

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    24.08.2009
    Beiträge
    30
    Zitat Zitat von sternst
    Und was ist mit menu[menu_index].up? Wo ist das gespeichert?
    Und was ist mit dem Pointer, den du an die Funktion übergibst? Wo ist der gespeichert?
    Das ist schon zumindest ein Anhaltspunkt.
    Ich muß also meine Struktur in den Flash bringen.

    Wäre das so richtig?

    Code:
    typedef struct def_menustruktur
    {
    	const char *text;
    
    	unsigned char next;
    	unsigned char previous;
    	unsigned char sub;
    	unsigned char up;
    
    	unsigned char ActionCode;
    	uint8_t ActionValue;
    }PROGMEM menustruktur;
    Oder muß jede einzelne Variable ins PROGMEN?

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von DerSchatten
    Ich muß also meine Struktur in den Flash bringen.
    Die Struktur ist bereits im Flash. Das ist ja der Knackpunkt. Du musst die Elemente der Strktur mit den Flash-Funktionen lesen.
    MfG
    Stefan

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    24.08.2009
    Beiträge
    30
    Ich verstehs zwar nicht (denn lcd_puts_p macht ja nichts anderes als pgm_read_byte davorzuschreiben) aber mit:
    Code:
    lcd_puts_p(pgm_read_byte(&menu[menu_index].text));
    funktioniert zumindest der erste Teil schon mal.

    Jetzt hab ich jedoch wieder diese öde Warnung:
    ../main.c:362: warning: passing argument 1 of 'lcd_puts_p' makes pointer from integer without a cast

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von DerSchatten
    funktioniert zumindest der erste Teil schon mal.
    Aber nur mit viel Glück. Falsche pgm_read-Funktion benutzt.
    MfG
    Stefan

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    24.08.2009
    Beiträge
    30
    ok, pgm_read_word dürfte korrekt sein.
    Wie bekomme ich jetzt noch diese Warnung weg?

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Indem du den geforderten Cast machst?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen