Moin,
kleine Frage zur Do - While schleife. Mein Programmierbackround bezieht sich nur auf VB6 und bischen Java, daher bin ich mir bei der folgenden Problematik nicht so sicher.
Für mein aktuelles Projekt habe ich auf einem 20x4 LCD ein kleines Menu geschrieben, welches maximal 5 Eben tief geht und mit 3 Tastern gesteuert wird. Da ich keine bestehende Menu library benutzen möchte, zwecks Lerneffekt, hab ich mal selber begonnen.
Erst hab ich EINE Menu Funktion gebaut, die bei Tastendruck aufgerufen wird und mit do - while schleifen in den Eben umherspringt. Das geht auch alles wunderbar, nur ist die Funktion als ganzes extrem groß und sehr unübersichtlich. Also hab ich mir überlegt jede Menü Ebene in eine Extra Funktion auszulagern. Somit hat jede Funktion nur noch ein Abfragenblock für Tasteninput und reaktion und einen für LCD, macht das ganze viel übersichtlicher. Der normale Weg wäre nun wohl der, in jeder Funktion bzw. Ebene regulär aus der Do-While Schleife mit einer Ausgangsbedingung bei Tastendruck auszubrechen. Wenn ich nun aber zB. Aus der 5. Ebene mit der Exit/back Taste eine Ebene zurück möchte, der Exit Taster aber natürlich in jeder Ebene benutzt wird, würde ich bei einem Tasterdruck gleich alle Ebenen durchlaufen und sofort wieder verlassen. Also Sichtbar von Ebene 5 auf die Hauptebene springen. Das ist natürlich nicht gewollt. Delays möchte ich nicht haben, also hab ich Ausgangsvariablen benutzt, die erst aktiviert werden wenn der Exit/back Taster einmal losgelassen wurde. Somit muss man für jede Ebene einmal den Taster drücken und loslassen um die nächste Ebene zu erreichen. Dabei hab ich mir überlegt das ich die Ausgangsvariablen nicht zwingend brauche, zumindest nicht in der Fülle, wenn ich nicht aus der Schleife mit einer erfüllten Ausgangsbedingung gehe, sondern indem ich direkt die nächste Funktion aufrufe. Leider bin ich gerade auf der Arbeit und hab den Code nicht hier, aber ich werde das einmal kurz schematisch beschreiben. Syntax bitte nicht beachten, hab mich auf das konzentriert was zum Verständniss notwenig ist.
Void Menu()
Lcd.print "menu blabla"
do{ if button1 (btnPin, HIGH){
} } While(unwichtig da nicht benutzt)
Void Untermenu()
Lcd.print "untermenu blabla"
do{ if button1 (btnPin, HIGH){
} } While(unwichtig da nicht benutzt)
Ich hoffe es ist klar geworden was mir unklar ist: Ist es problematisch wenn ich eine do-while Schleife nicht mit der Ausgangsbedingung verlasse sondern zwischen den Funktionen hin und herspringe? Bleibt da irgendwo im Speicher was von den nicht beendeten Schleifen hängen?
Bisher funktioniert das ohne Probleme, nur weiss ich eben nicht was genau im Hintergrund passiert bzw. nicht passiert.
Danke und Gruß,
Christian