I2C LCD Display Menu+ unter Menu

Aktuell sind Code und Daten (die Menustruktur) ziemlich miteinander verwoben. Ich würde das trennen.

Für die Darstellung der Menustruktur könnte man structs verwenden. (Genaue Syntax und Datentypenmusst du mal rausfinden)

struct MenuItem{
  String titel;
  Function action;
  Pointer parameter;
};

struct Menu{
  Uint countItems;
  MenuItem items[];
};

Die Daten könnte man das in etwas so schreiben:

Menu menuSolar = {
  2,
  {
    {"Stromstaerke", showValue, &solarAmp},
    {"Spannung", showValue, &solarVoltage}
  }
};

Menu menuRoot = {
  8,
  {
    {"Solarenergie", enterSubmenu, &menuSolar},
    {"Windenergie", enterSubmenu, &menuWind},
    {"Garagentor", enterSubmenu, &menuGarage},
    {"Luftqualitaet", enterSubmenu, &menuLuft},
    {"Strassenlaternen", enterSubmenu, &menuLaternen},
    {"LED Haus", enterSubmenu, &menuHaus},
    {"Ampel", enterSubmenu, &menuAmpel},
    {"Akkustand", enterSubmenu, &menuAkku}
  }
};

Menu* currentMenu = menuRoot;
Uint currentMenuItemIndex = 0;

Um wieder eine Menuebene zurück zu kommen, könnte man die bisherigen Ebenen in einem Array speichern. Die Struktur dazu könnte so aussehen:

struct HistoryItem{
  Uint itemIndex;
  Menu* menu;
};

Uint historyMaxItems = 5;
struct History{
  Uint numberItems;
  HistoryItem items[historyMaxItems];
};