www.mikrocontroller.net

Forum: Compiler & IDEs Frage zu einfacher Schleife/Bedingung


Autor: Bastian F. (bastian_f)
Datum:

Bewertung
0 lesenswert
nicht 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ß!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Skua (Gast)
Datum:

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

Autor: Bastian F. (bastian_f)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kriege es nicht hin, selbst wenn ich mit zwei Tastern arbeite :(
    switch (tast)        {
            default:
            case NO_TASTER:
            break;
            case 0:
 while(1) {

irgendwas_passiert();
              
              if (tast==1) { break;}
        
          }

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?

Autor: Huch (Gast)
Datum:

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

Autor: Bastian F. (bastian_f)
Datum:
Angehängte Dateien:

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

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.... ;-)

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.