Formel funktioniert nicht

Hallo Zusammen

ich probiere nun seit Stunden und finde einfach keine Lösung.

Bei folgender Formel lcd1.print((tempK /10 + 5) - (DifferenztemperaturS2,0));
kommt als Ergebnis ( Anzeige im LCD2) immer nur der Wert der DifferenztemperaturS2 raus.

ich hab die Formel schon in die einzelnen Rechenschritte zerlegt und das hat auch nicht geholfen.

Weiß jemand einen Rat?
Den vollständigen Sketch habe ich unten angehängt.

Vielen Dank Rudi

_40b_die_noch_fehlenden_K_bis_zum_ent__bzw_Laden_werden_ausgere.ino (23.8 KB)

Hallo,

was macht das ,0 hinter DifferenztemperaturS2 ?

lcd1.print((tempK /10 + 5) - (DifferenztemperaturS2,0));

Ansonsten, lasse Dir den Wert von tempK und DifferenztemperaturS2 direkt davor seriell ausgeben.
Dann sieht man erstmal ob die richtigen Werte überhaupt bei der Formel ankommen.
Oder mal wieder ein Problem mit float und Ganzzahlen.
Schreibe 10.0 statt 10 und 5.0 statt 5

,0 bedeutet Anzahl der Stellen hinter dem Komma - also soll hier wohl nach dem Komma nichts mehr angezeigt werden.
Versuche mal zunächst dir die Zwischenwerte auf dem Display anzeigen zu lassen. So mache ich es, wenn ich am Code "rumfeilen" will. Entweder noch ein 3. Display ran, oder einen Codeblock auskommentieren und dafür eine Prüfroutine, die dir die Variablen als Rohwerte und die Zwischenergebnisse anzeigt.
Ich habe mal in meinen Projekten nachgeguckt, ich mache immer ein Leerzeichen zwischen ,"Antahl der Nachkommastellen". Vielleicht interpetiert der Compiler das ansonsten als S mal 2,0, oder weiß der Fuchs was...

Gruß Gerald

Wenn das die Arduino Formatierung für Nachkommastellen sein soll sind aber die Klammern falsch gesetzt.

Hallo

vielen Dank für Eure Mühen

jetzt hab ich mal die Kommastellenformatierung rausgemacht und eine Serialausgabe dazugefügt.

Serial.print("Diff bis Ladeende=");
       Serial.print((tempK /10 + 5) - (DifferenztemperaturS1));
       Serial.print("     ");
       lcd1.print((tempK /10 + 5) - (DifferenztemperaturS1));

und siehe da auf dem Serialmonitur wir der Wert richtig dargestellt nur auf dem lcd1 natürlich nicht wie kann das denn angehen?

Ach ja mit der Formatierung 10.0 statt 10 und 5.0 statt 5 hab ichs versucht hat leider auch nichts gebracht.

Hallo Rudi,

Bei folgender Formel lcd1.print((tempK /10 + 5) - (DifferenztemperaturS2,0));
kommt als Ergebnis ( Anzeige im LCD2) immer nur der Wert der DifferenztemperaturS2 raus.

warum sollte es auf LCD2 angezeigt werden, wenn du schreibst lcd1.print.....

Wie Serenifly schon geschrieben hat: die Klammern sind falsch gesetzt!

Probier doch mal statt
lcd1.print((tempK /10 + 5) - (DifferenztemperaturS2,0));
besser
lcd1.print((tempK /10 + 5) - DifferenztemperaturS2,0 );

oder gleich

lcd1.print(tempK / 10 + 5 - DifferenztemperaturS2,0)

Da ja die math. Operationen von links nach rechts durchlaufen: wozu noch Klammern?

LG

Dirk

Hallo,

also bei mir klappt das . Einmal wird -4,25 und darunter -4 auf dem Display angezeigt.
mit Bsp. Werten:
float tempK = 22.5;
float DifferenztemperaturS2 = 11.5;

lcd.setCursor(0,0); lcd.print( (tempK / 10.0 + 5.0) - DifferenztemperaturS2 );

lcd.setCursor(0,1); lcd.print( (tempK / 10.0 + 5.0) - DifferenztemperaturS2,0 );

@ Dirk:
in dem Fall ja, bei anderen Formelzusammenstellungen sollte man die Klammern setzen. Selbst mancher vermeintlich guter Taschenrechner kennt keine Punkt vor Strich Rechenregel.

Stimmt.
Deswegen ja auch die von links nach rechts Bemerkung.
Bei Punkt vor Strich (in diesem Fall identisch) wäre ich mir nicht sicher gewesen ...

LG

Dirk

Das Problem ist das hier:

lcd1.print((tempK /10 + 5) - (DifferenztemperaturS2,0));

Das ,0 sollte sich auf den gesamten Term beziehen. Nicht auf DifferenztemperaturS2

Hmm.
liquidcrystal_i2c ist kompatibel zur in Arduino beschriebenen LCD-Bibliothek.
Wenn ich mir die LCD-Bibliothek ansehe, dann steht dort:

lcd.print(data, BASE)

data: the data to print (char, byte, int, long, or string)
BASE (optional): the base in which to print numbers: BIN for binary (base 2), DEC for decimal (base 10), OCT for octal (base 8), HEX for hexadecimal (base 16).

Demnach ist "0" dann was? Meiner Meinung nach ungültig?

LG

Dirk

Bei Float gibt es die Anzahl der Nachkommastellen an. Das obige ist natürlich keine Float Division, da alles Integer sind. Das ist dann auch noch ein Fehler wenn man da Nachkommastellen möchte!

Bei anderen Datentypen kommt u.U. Unsinn heraus. Das hatten wird schon mal ein Thema drüber, wo jemand sowas gemacht hat:

int var = 5;
Serial.println(var, 4);

Und sich dann gewundert hat dass da Blödsinn rauskommt. Das läuft, aber es wird dann mit Basis 4 gerechnet. Ich weiß nicht was bei 0 gemacht wird.

Stimmt.
Aber für

Serial.print()

gilt

For floating point numbers, this parameter specifies the number of decimal places to use.

Für lcd.print fand ich nichts in der Richtung ...

LG

Dirk

Genau das gleiche.

Das übernimmt zentral die Print Klasse. Alle Standard Arduino Klassen die print()/println() machen sind von Print abgeleitet.

Dann ziehe ich meinen Einwand unschuldig pfeiffend zurück und bedanke mich für die Wissenserweiterung.

LG

Dirk

Hallo Zusammen
und Danke an Alle vor-allem an Dirk
Durch seinen Hinweis hat dann geklappt.

lcd1.print((tempK /10 + 7) - DifferenztemperaturS1);

im gesamten Code musste ich noch ein paar Klammern richtig setzen nun wartet das nächste Problen schon.

nochmals vielen Dank