Hi,
ich versuche ein Menü mit drei Tasten und einem Nokia 5110-Display zu
schreiben, es funktioniert nocht nicht viel so wie es soll, aber das
muss ich alles noch austüfteln, deswegen machen ich das auch, will mich
mal an was komplexeres auf Anfänger-Niveau wagen.
Erstmal hier der letzte Versuch und danach die eigentliche Frage:
(Haupt)Problem: Die buttons-Funktion funktioniert ansich funktionell,
auch durch die cases im switch(subMenus) zu blättern funktioniert, aber
seltsamerweise nur solange sie im Loop stehen, das Aufrufen der
mainMenu-Funktion geht von überall, aber sobald die Funktion läuft,
passiert nichts beim Tastendruck. Wie man im Code sehen kann, habe ich
die buttons-Funktion auch nochmal versucht in der mainMenu-Funktion zu
starten, was theoretisch und praktisch keinen Sinn macht.
Könnt ihr den Fehler erkennen? Ich stehe total auf dem Schlauch.
Nebenproblem: Wenn das switch-statement im Loop ist und funktioniert,
reagieren die Tasten viel zu schnell, ich kapier nicht wie ich das
ausbremsen soll, hatte vor und nach dem Speichern vom temporären in den
letzten Zustand eine Verzögerung eingebaut, aber das hat nicht
funktioniert.
Ich würde mich sehr freuen, wenn ihr mich ein wenig unterstützen könnt,
ich weiss, dass hier einige auf solche Fragen sehr allergisch reagieren,
daher möchte ich extra erwähnen, dass es mir im Grunde reicht, wenn ihr
mir die Fehler aufzeigt, bin aber klar nicht unglücklich, wenn ihr mir
zumindest in ganz normalen Worten eine alternative Lösung anbietet.
Vielen Dank im Voraus,
Bastler
> Die buttons-Funktion funktioniert ansich funktionell,> auch durch die cases im switch(subMenus) zu blättern funktioniert,> aber seltsamerweise nur solange sie im Loop stehen, das Aufrufen der> mainMenu-Funktion geht von überall, aber sobald die Funktion läuft,> passiert nichts beim Tastendruck.
Kannst du dein Problem nochmal auf deutsch beschreiben? Das ist für mich
total unverständlich. Versuche es mal mit viel kürzeren Sätzen.
Bastler schrieb:> aber sobald die Funktion läuft,> passiert nichts beim Tastendruck> if (lBtnState == btnOk) mainMenu(1);
die fkt und alle abfragen in dieser funktion werden nur währen des
drückens von ok ausgeführt. Mal dir mal deine ganze verschachtelung auf.
Trenne zwischen status, eingabenverarbeitung und anzeige, alles muss
regelmässig gemacht werden.
Du brauchst eine Flankenerkennung, da Du ja nur eine Aktion bei jedem
Drücken ausführen willst und nicht solange Du drückst.
Und Entprellen ist auch sinnvoll.
Es scheint, daß Du die Tasten analog mit Spannungsteiler einliest, hier
mal ein Beispeil dafür:
Beitrag "Tastenmatrix auslesen über nur 2 Leitungen"
Stefan U. schrieb:> Kannst du dein Problem nochmal auf deutsch beschreiben? Das ist für mich> total unverständlich. Versuche es mal mit viel kürzeren Sätzen.
Dafür sind doch die Kommas da, das ist halt das Problem. Wenn ich es im
Kontext kürzer beschreiben könnte, würde ich das. Die buttons-Funktion
funktioniert nur im loop, in jeder anderen Funktion nicht.
Flip B. schrieb:> die fkt und alle abfragen in dieser funktion werden nur währen des> drückens von ok ausgeführt.
Ne, lBtnState ist nachdem der Taster gedrückt wurde, die Funktion läuft
dann, dabei wird aber immernoch "Hauptbild" angezeigt und darüber dann
die Einträge aus der mainMenu-Funktion. Innerhalb der cases reagiert die
Taste btnOk, aber auch sehr seltsam, wenn ich sie nur kurz drücke, dann
ruft es die mainMenu-Funktion erneut auf, wenn ich sie länger halte,
dann das, was im angewählten case steht, die subMenu_0-Funktion. Aber
ich kann nicht mehr durch die cases switchen.
> Mal dir mal deine ganze verschachtelung auf.
Das habe ich vorher schon, sozusagen, also mir ein Schema aufgestellt,
deswegen ja, für mich scheint es alles logisch, aber mein Verständnis
dafür reicht wohl noch nicht aus, um zu erkennen warum.
> Trenne zwischen status, eingabenverarbeitung und anzeige, alles muss> regelmässig gemacht werden.
Das verstehe ich nicht.
Peter D. schrieb:> Du brauchst eine Flankenerkennung, da Du ja nur eine Aktion bei> jedem Drücken ausführen willst und nicht solange Du drückst.> Und Entprellen ist auch sinnvoll.> Es scheint, daß Du die Tasten analog mit Spannungsteiler einliest, hier> mal ein Beispeil dafür:> Beitrag "Tastenmatrix auslesen über nur 2 Leitungen"
Ja, es funktioniert ja nach demselben Prinzip, ein Widerstand hängt
zwischen Gnd und I/O und zwischen +5V und den Taster-Eingängen jeweils
einer mit anderem Wert, der Ausgang der Taster hängt wiederum auch am
I/O bzw. Gnd über den ersten Widerstand. Ich habe doch ein btnState und
l(ast)BtnState, also während und danach und der Sinn der
buttons-Funktion ist doch Entprellen.
Dein verlinkter Beitrag ist mir noch zu hoch, soweit bin ich noch nicht,
aber der Link dazu ist gespeichert, danke dafür.