Forum: Compiler & IDEs Frage zu einfacher Schleife/Bedingung


von Bastian F. (bastian_f)


Lesenswert?

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ß!

von Karl H. (kbuchegg)


Lesenswert?

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)

von Skua (Gast)


Lesenswert?

Du must dir den aktuellen Zustand merken und davon abhängig deine Aktion 
ausführen.
Stichworte: Flags und Zustandsautomaten.

von Bastian F. (bastian_f)


Lesenswert?

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?

von Huch (Gast)


Lesenswert?

Bitte Code posten, der, auf das Notwendigste reduziert, den Fehler noch 
enthaltend, kompiliert werden kann.

von Bastian F. (bastian_f)


Angehängte Dateien:

Lesenswert?

Hoffe, das passt so.
Ich habe aber vergessen, die includes für das LCD rauszunehmen, aber das 
wirst du wohl selber merken...

von Huch (Gast)


Lesenswert?

>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.... ;-)

von Hc Z. (mizch)


Lesenswert?

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
Noch kein Account? Hier anmelden.