mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik IF-Scheife wird nicht verlassen


Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

also ich habe folgendes Problem:

Bei meiner IF-Schleife

if((Rot_ST >= ROT_STROM_SOLL1) && (Rot_ST <= ROT_STROM_SOLL2))
  {
  send_text("Dieser Text wieder unendlich mal ausgegeben");
  }
  else{fehlerausgabe(ROT);}

if((Gelb_ST >= GELB_STROM_SOLL1) && (Gelb_ST <= GELB_STROM_SOLL2))
  {
  }
  else{fehlerausgabe(GELB);}

vergleicht er die Werte und wenn die Bedingung zutrifft soll er in die 
nächste Schleife gehen aber das tut er nicht. Wenn die Bedingung 
zutrifft gibt er mir unendlich oft den Text der 1. Schleife aus.

Kann mir jemand verraten wieso er das tut?

Vielen Dank schonmal im Vorraus.

Autor: Kola (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Bedingungen sind wohl falsch.
WENN rot_st GRÖßERGLEICH .. UND KLEINERGLEICH...

Ich glaube, du musst statt dem AND (&&) ein OR (||) machen.

Autor: Marvin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if / else ist keine Schleife.
Schleifen werden mit for(), while() oder do{}while(); realisiert.

Von allein springt das Programm mit Sicherheit nicht zurück zur 
if-Bedingung, ich vermute irgendein Problem in der send_text() - 
Routine, die einen Reset auslöst. Stacküberlauf, Pointerprobleme o.ä.
Poste doch bitte mal den gesamten Code.


Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Marvin: Ok du hast recht eigentlich ist es ne IF-Anweisung.

@Kola: Im Grunde sag ich dem Programm nur das der Wert den er bekommt 
nicht unbedingt genau der selbe sein darf er darf sich +- um einen 
bestimmten Wert unterscheiden ohne das er in die Else Anweisung springt.

Mein Problem ist halt nur obwohl die Bedingung zutrifft geht er nicht 
weiter und bleibt immer in der IF-Anweisung! Die Else-Anweisung wrid 
nicht aufgerufen!

Den Text den ich da reingeschrieben habe habe ich nur zur visuellen 
bestätigung dort eingefügt damit ich sehe das er immer wieder die 
IF-Anweisung ausführt da meine Bildschirmausgabe so aussieht:

Dieser Text wieder unendlich mal ausgegeben
Dieser Text wieder unendlich mal ausgegeben
Dieser Text wieder unendlich mal ausgegeben
Dieser Text wieder unendlich mal ausgegeben
u.s.w.

Den Text Befehl kann ich aber auch weglassen da tut sich ebenfalls 
nichts!

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mein Problem ist halt nur obwohl die Bedingung zutrifft geht er nicht
> weiter und bleibt immer in der IF-Anweisung! Die Else-Anweisung wrid
> nicht aufgerufen!
Hä? Genau das soll er doch machen, wenn die Bedingung erfüllt ist.

Also:
1.: Poste mal mehr von Deinem Code (ohne den wird hier niemand Dein 
Problem nachvollziehen können)
2.: Formuliere Deine Aussagen so, dass man sie auch nachvollziehen kann.

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab das Probelm selbst schon behoben.

Es lag daran das die IF-Anweisung in einer For Schleife ist und ich die 
laufvariable i (für die For-Schleife) nicht lokal sondern global 
deklariert habe!

Trotzdem danke für die Kritik und die Lösungsvorschläge.

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.