Wenn ein Taster gedrückt wird, startet eine Schleife die unterbrochen werden soll, wenn der gleiche Taster nochmal gedrückt wird. Wie kann ich das realisieren? Mein Problem ist, dass ich ja beide Male auf das gleiche Ereignis reagieren muss, aber mit einem anderen Ausgang und ich nicht weiß was ich zu tun habe. Ich habe probiert, in die Schleife noch eine Abfrage zu setzen um diese zu unterbrechen, aber das hat nicht funktioniert. Danke für jeden Denkanstoß!
Bastian F. schrieb: > Ich habe probiert, in die Schleife noch eine Abfrage zu setzen um diese > zu unterbrechen, aber das hat nicht funktioniert. Dann zeig doch mal, was genau nicht funktioniert hat. Hast du auch berücksichtigt, dass die Taste zuvor losgelassen werden muss ehe sie zum 2ten mal als gedrückt erkannt werden kann? Nur dadurch dass dein Programm feststellt, dass die Taste auch losgelassen wurde, kannst du von einer gedrückten Taste unterscheiden ob sie jetzt das erste mal oder das zweite mal gedrückt wurde. (Und dann gibt es natürlich noch das Problem des Tastenprellens)
Du must dir den aktuellen Zustand merken und davon abhängig deine Aktion ausführen. Stichworte: Flags und Zustandsautomaten.
Ich kriege es nicht hin, selbst wenn ich mit zwei Tastern arbeite :(
1 | switch (tast) { |
2 | default:
|
3 | case NO_TASTER: |
4 | break; |
5 | case 0: |
6 | while(1) { |
7 | |
8 | irgendwas_passiert(); |
9 | |
10 | if (tast==1) { break;} |
11 | |
12 | }
|
tast überwacht die Taster und gibt die Änderung weiter, was auch überall funktioniert, nur sobald die while Schleife läuft, "sieht" das Programm das wohl nicht mehr. Auch sowas wie while(!tast==1) funktioniert nicht. Kann mir eventuell jemand ein Beispiel geben, wie es funktioniert, oder sonstwie auf die Sprünge helfen?
Bitte Code posten, der, auf das Notwendigste reduziert, den Fehler noch enthaltend, kompiliert werden kann.
Hoffe, das passt so. Ich habe aber vergessen, die includes für das LCD rauszunehmen, aber das wirst du wohl selber merken...
>aber das wirst du wohl selber merken...
Vielleicht merk ich das....
Aber ich warte einfach, bis Du Code postest, der, auf das Notwendigste
reduziert, den Fehler noch enthaltend, kompiliert werden kann.
LCD hast Du in Deiner Problembeschreibung nicht erwähnt. Also entfernen.
"Auf das Notwendigste reduzieren".
Konsequent einrücken. Lesen wollen wir das auch können.
Das kann noch ein halbes Jahr so gehen. Lass Dir Zeit.... ;-)
Huch schrieb: > Konsequent einrücken. Lesen wollen wir das auch können. Wenn der Code konsequent eingerückt wäre, hatte man sehen können, dass in versuch_led_2.c schließende geschweifte Klammern (vermutlich 2) fehlen. Auch enthält es toten Code (in einem switch stehen nach dem break Anweisungen, die kein Label haben - die Einrückungen führen einen allerdings in die Irre, weil man nicht sieht, dass die Anweisungen noch innerhalb der switch stehen). Vermutlich wurden da Einrückungen erst schludrig gehandhabt und dann wurde dem geglaubt, was sie vortäuschen. Weiter habe ich nicht gesucht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.