mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik if Abfrage in C funktioniert nicht


Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
kann mir jemand sagen warum bei dieser Abfrage immer true herauskommt?
Ich möchte erreichen das Tist in einem gewissen Intervall liegt.
z.B Tsoll = 25.0 dann soll die Bedingung erfüllt sein wenn Tist zwischen 
24.99 und 25.01 ist.

if((Tist > (Tsoll-0.01)) && (Tist < (Tsoll+0.01)))


Hoffe es liegt nicht daran dass die Variablen den Typ float besitzen.

Danke
Werner

Autor: sechsnullfuenf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann's am && liegen ?
Nebenbei, es sind zei additionen und zwei vergleiche. Das geht 
einfacher.

If (abs(Tist-Tsoll)<= 0.01) ist einfache

Autor: René Henrich (rhenrich)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Hab das eben mal getestet, funktioniert doch,vielleicht soltest du mal 
ein bischen mehr von deinem quellcode posten, der fehler muss wo anders 
liegen.
Die reine If-Abfrage funktioniert.

MFG

Autor: Detlef _A (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht macht Tist minimale Änderungen von 0.1Kelvin oder so, dann 
wird der Ausdruck immer true wenn Du nicht Tsoll genau triffs. Ich 
gleube nicht, daß Du einen Sensor benutzt, der 1/100 Kelvin auflöst.

Gute Nacht
Detlef

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn float: "if(fabs(Tist-Tsoll)<0.1) ... ;"

Kürzer, schneller, weniger fehleranfällig.

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Sensor geht auf 1/5000 genau (wenn man mal vom Rauschen absieht).
Die Regelung auf wenige 1/1000 (ginge wahrscheinlich noch besser).

So ein blöder Fehler, ich hab lediglich vergessen den Ausgang zurück zu 
setzen falls die Bedingung nicht erfüllt ist.

Habs aber trotzdem umgeschrieben auf if(fabs(Tist-Tsoll)<=0.1), weil es 
besser lesbar ist.

Danke für eure Hilfe
Werner

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Der Sensor geht auf 1/5000 genau (wenn man mal vom Rauschen absieht).
>Die Regelung auf wenige 1/1000 (ginge wahrscheinlich noch besser).

Ist zwar OT, aber du meinst doch sicherlich KiloKelvin, oder?

Oliver

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.