www.mikrocontroller.net

Forum: Compiler & IDEs while Schleife mit oder Verknüpfung


Autor: Timebeast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich programmiere gerade einen Mega8 unter AVR Studio.

Folgendes Problem stellt sich gerade, ich habe eine While Schleife, die 
auch funktioniert:
  while(!(Taster_gedrueckt())){
    Led_1_aus();
  }
  Led_1_an();

Jetzt würde ich allerdings gerne noch eine Timeout Routine mit einfügen, 
und dachte mir eine ODER-Vernüpfung würde reichen, aber es funktioniert 
danach gar nichts mehr.
Also in der Art:
  while(!(Taster_gedrueckt())||timeout){
    Led_1_aus();
    timeout--;
  }
  if (!(timeout)){timeout=220000;Led_2_an();}
  Led_1_an();
Normalerweise sollte er doch solange in die WHILE-Schleife bleiben, bis 
entweder Taster=1 ODER timeout=0 wird. Macht er aber nicht. Er reagiert 
noch nicht einmal mehr auf den Taster, was er beim ersten Beispiel noch 
getan hat.

Wo liegt der Fehler?

Gruß Ralf

P.S.: Es geht mir um die Beantwortung DIESER Frage. Ein Workaround 
mittels if Anweisung bekomme ich selber hin. Aber warum geht das nicht 
mit der WHILE Schleife???

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst doch die while-Schleife verlassen, wenn entweder der Taster 
gedrückt wird oder der Timeout abläuft.
Demzufolge willst Du aber beim Gegenteil in der Schleife verharren,
also UND-Verknüpfung:
while(!(Taster_gedrueckt()) && !timeout)

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Etwas einfacher formuliert: Du willst die Schleife durchlaufen, solange 
der Taster nicht gedrückt ist und der Timeout nicht abgelaufen ist.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
scheint eine Wollknäulprogrammierung zu werden...

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.