Zugriff auf struct-char-Element mit Serial.println

Hallo,
ich habe mit eine Stuktur erstellt:

const  byte DISP_ANZ_SPALTEN = 20;

typedef struct PROGMEM
{
    unsigned char state;
  const char Zeile1[DISP_ANZ_SPALTEN];
  const char Zeile2[DISP_ANZ_SPALTEN];
  const char Zeile3[DISP_ANZ_SPALTEN];
  const char Zeile4[DISP_ANZ_SPALTEN];
} MENUE_TEXTE;

const byte ANZ_TEXTE = 3;
enum DISP {ST_HAUPT, ST_Status_1, ST_Status_2};
byte akt_Status=ST_HAUPT;

const MENUE_TEXTE menue_teste[ANZ_TEXTE]  = {
  { ST_HAUPT,   " Status",    " Einstellungen", "",       ""  },
  { ST_Status_1,  "Status #1",  " Spannung",    "Uhrzeit",    "Helligkeit"  },
  { ST_Status_2,  ">Status #2", "L1: DIMRU" ,   "L2: DIMRU",  "Klappe"  }
};

ich kann auf Elemente der Variablen menue_teste mit der Funktion Serial.println nicht zugreifen:

void setup()
{
  Serial.begin(115200);
  akt_Status = ST_HAUPT;
  // Schreibe neues Menü
  print_menue(akt_Status);
}

void print_menue(byte Status){
  // Hole Zeile aus Menütexttabelle
  byte i;
  byte DBG=1;
 char menue_tte[25] = "Testet";
  for (i=0;i<ANZ_TEXTE;i++){
    if (menue_teste[i].state == Status) break;  
  }
  
  if(DBG==1) Serial.print("print_menue: Textzeile");
  if(DBG==1) Serial.println(String(i));
  
  Serial.println(menue_teste[i].Zeile1);
  if(DBG==1) Serial.println("Ende");
  return;
}

Es kommen nicht definierbare Zeichen im Monitor an. Könntet ihr euch das mal anschauen und eure Meinung abgeben, wo der Fehler liegt?

Danke und Grüße,
Skeelo :slight_smile:

PS: Ich verwende Arduino 1.6.12....

Völlig falsche Verwendung von PROGMEM. Selbst wenn du das so ins Flash schreiben könntest (was ich bezweifle. PROGMEM mit dem Array geht vielleicht) darfst du beim Zugriff dann nicht so tun als stünde das im RAM. Dafür gibt es Funktionen um Daten aus dem Flash ins RAM zu kopieren. Siehe Referenz.

Ja. Da hat Serenifly leider recht.

Ausserdem:
Noch bevor du auf die Texte zugreifst, geht leider schon menue_teste[ i ].state schief.
Das mit dem Suchen ziehst du ja sowieso nicht richtig durch, nimm das byte / enum (?) lieber als index.