Rotary-Encoder und Submenue

Hallo zusammen,
ein Newby hat mal wieder dumme Fragen :o

Ich habe einen Drehencoder mit Pushputton. Über eine Abfrage und anschliessendem CaseSwitch funktioniert das soweit wie gewünscht. Nun habe ich in einem von fünf Cases die Anforderung, eine "Sub"-Menue-Ebene mit dem Drehencoder zu bedienen.

Also, das Teil steht nun in Case4 und ich muss den Rotary abfragen, jedoch brauche ich dazu ja wieder eine Loop, quasi innerhalb der Void Loop() denn ich will ja den Status des bereits gewählten Case4 nicht verlassen.

...
case 4: {Serial.println("Funktion 4 gewählt");
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
...
Hier muss ich wieder den Encoder in einer Schleife abfragen u. entsprechend reagieren.

Wie macht man das sinnvoller Weise?

Danke und viele Sonntagabendgrüße!

so ganz verstehe ich dein Problem nicht.

Vermute aber mit einer Statusvariable und einem folgenden Break wirst du in der loop weiter kommen.

kaleidoskop:
Wie macht man das sinnvoller Weise?

Mir geht's wie Hotsystems. Ich verstehe nur Bahnhof.

Beschreibe doch mal ein bisschen verständlicher, worum es geht.

Gruß

Gregor

(deleted)

Du könntest dir zum Beispiel in "case 4" als erstes eine Variable auf "high"setzen. Diese Variable stellst du als Bedingung vor das Einlesen des Drehgebers, sprich nur wenn sie "low" ist wird der Drehgeberwert überhaupt eingelesen für "switch/case". Jetzt kannst du den Drehgeber innerhalb von "case 4" neu einlesen und wenn du das "submenue" verlässt setzt du sie wieder auf "low".

Einfacher ginge es wenn man deinen gesamten Sketch zu sehen bekäme.

Gruß Scherheinz

Hi

Oder Du nimmst ein fertiges Menü, Welches (mit Unter-Menüs) per Drehencoder durchscrollt werden kann.
Man muß nicht Alles neu erfinden - einen Teil gibt's schon servierfertig auf dem Silber-Tablett.

Alternativ zählst Du in Deinem Untermenü 'case 4' in 10er Schritten hoch/runter.
Für Deinen case 4 musst Du allerdings Alles, was >5 ist (Deine Grund-Menü-Struktur) hier ausblenden (damit Du in 4 bleibst, auch wenn Du schon auf 34 gezählt hast).

Damit man Das auch mit handelsüblichen Operationen hinbekommt, würde ich 'ab Bit 4' vorschlagen.

Menü-Ebene 1 ginge von 0-7
Untermenü 1 wäre 8
Untermenü 2 wäre 16
Untermenü 3 wäre 24 (also immer 8 mehr).

Das lässt Sich herrlich per Bitschieberei trennen.
Auch kannst Du so jedem Menü-Punkt Untermenü's bescheren.
8 wäre, wie schon geschrieben, Grundmenü 0, Untermenü 0
9 wäre 1+8 - also Grundmenü 1, Untermenü 1
11 wäre 1+(8+2) - also Grundmenü 1, Untermenü 3

Das macht die Sache logisch und recht einfach umzusetzen - aber sofern das Menü nicht ganz knapp vor Vollendung steht, würde ich zumindest das Fertig-Zeug Mal antesten.

MfG

Hallo,

nimm enum, sprechende Variablen, und baue dir damit dein Menü zusammen. Die Auswertung und Steuerung erfolgt in einem switch case. Glieder alles in klare Funktionen. Optimalerweise ändern die enum's nur im switch case ihren Wert/Zuweisung. Von dort aus werden idealerweise nur Funktionen aufgerufen.
Verteilst du die enums im Sketch haste schnell Kaos, gerade mit Menü mit vielen Ebenen.
Vorher sollte aber der Encoder sicher funktionieren.