Statische Texte speichern

Hallo,
ich habe eine (vermutlich ziemlich dumme) Frage zum Speichern von Texten für ein Menü.

Ich habe mehrere Menüs (ein Hauptmenü, von dem aus mehrere Untermenüs aufgerufen werden). Dabei soll in jeder Zeile ein Menüpunkt angezeigt werden (Text und dahinter gegebenenfalls ein Wert, der entweder veränderbar sein soll oder aus der Anwendung heraus kommt).

Die Struktur des Menüs erstelle ich in einem switch/case Statement als Statemachine.

Nun könnte ich jedes mal, wenn ein Menü aufgerufen wird, einfach die Texte mit .print auf mein Display schreiben (ggf. mit dem F-Makro) oder ich speichere die Menütexte in einem Struct, aber beides kommt mir irgendwie wenig elegant vor.

Dann hatte ich die Idee, die Texte als .txt-Datei auf der SD-Karte zu speichern und bei jedem Aufruf auszulesen, was aber daran scheitert, daß die SD-Karte zum Daten speichern und zum Austausch mit dem PC verwendet wird und auch mal nicht da sein kann.

Ich benutze einen ESP32 WROOM, daher sollte Speicher kein großes Problem sein.
Gibt es irgend eine elegantere Möglichkeit die Texte abzulegen, die ich nicht auf dem Schirm habe?

Evtl. im LittleFS auf dem ESP32.

Gruß Tommy

Mache so was mit Switch Case + Tabs, dazu wen der Menu "punkt" wird aufgerufen wird nur ein mall auf dem Display geschrieben
zB

if (!geschrieben) {

 // Dein Text
geschrieben = true;
}

//Jetzt kommen die Endbaren Daten, Werte

Somit bei Aufruf wird nur einmal auf Display "geschrieben" und die Angezeigte Werte können sich ruhig ändern.
Das spart unheimlich viel zeit, den das schreiben auf Display bei allen Libs nimmt die meiste zeit weg. wen man dazu Touch oder Taster nutzt geht es um jede Millisekunde.

Daran hatte ich noch gar nicht gedacht. Das werde ich mal ausprobieren. Allerdings muss ich mich dazu erst mal in das LittleFS einarbeiten.

Das hatte ich ohnehin vor. Ich werde für jedes Menü zwei Case verwenden. Im ersten werden die Texte geschrieben und im zweiten kommt die Verarbeitung des Encoders und die Aktionen, die ausgeführt werden.

Nur wie geschrieben lesen dauert. Deshalb lasse alles im Sketch, weis nicht wie du im im Menü willst springen (Touch, Taster, Encoder) und was für Display soll das sein.
Persönlich nutze nur SPI TFT und Touch manchmal zusammen mit IR. Ein "Bild" Aufbau dauert bei mir zw. 12 und 16 Millisekunden, wen es mehr als 0,5 Sek ist hat man Problem mit der Auswertung, alles wird Träge

ich weis nich welche Romane du in dein Menü packen willst, aber auf einem ESP32 sollte doch eine Menüstruktur gut in den bestehenden Speicher passen.

Da würde ich eher auf lesbaren/wartbaren Code achten als das letzte Byte sparen zu wollen.

Das ist ein 128x64 2,42" OLED, angeschlossen über SPI.

Romane werden es eher nicht. Höchstens 10 Zeichen lange Menüpunkte und dahinter einige Werte.

Es geht mir primär auch nicht um den Speicher, sondern eher darum, die Texte halbwegs übersichtlich und eben wartbar in den Code zu packen.
Da ist eben die Entscheidung, sie alle an einer Stelle zu haben oder in den Case-Abschnitten zum jeweiligen Menüpunkt.

Hallo nano555e

Klöppel alle Daten, Texte und Memberfunktionen in ein structured/array zusammen. Damit erreichst du eine gute Wartbarkeit des Programmes.

das kommt wohl aufs Menüsystem an.
Wenn du z.B. wiederkehrende Optionen hast (ein/aus, rot/gelb/grün) dann zahlt es sich aus, wiederverwendbare Funktionen zu bauen, um nicht Codezeilen mit STRG-C/STRG-V duplizieren zu müssen.

Oder du willst etwas mehrsprachig vorsehen, dann wären vieleicht Texte in separten .h Dateien interessant.

Kommt halt darauf an was man braucht/will...

Nein, jedes Menü ist anders, da wiederholt sich nix.
Und mehrsprachig brauche ich auch nicht. Das würde eher Sinn machen, wenn man das fertige Gerät verkaufen will. Aber das (Verkaufen) ist ein Aufwand, auf den ich überhaupt keine Lust habe. :wink:

Also alles in TAB auslagern und mit Case aufrufen. ist einfach und hast Ordnung.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.