Hallo zusammen, ich habe einen Temperaturwert im doublewert berechnet. komma = wert_temperatursensor * 5.0 / 1024.0; // A/D-Wert in Spannung umrechnen (AREF=5V, 10 Bit A/D-Wandler: 2^10=1024) komma = komma - V_0GRAD;// akt. Spannung - Spannung Gefrierpunkt komma *= 100.0; // in °C umrechnen Wenn ich den vorherigen Temp-wert mit dem Nachfolgenden vergleiche, dann funktioniert mein Vergleich nicht. if (abs(komma_vorheriger-komma)>=1) //Schreibe nur aufs LCD-Display, wenn sich der Wert um mindestens 1°C verändert hat { dtostrf((komma), 2,0, texte); lcd_gotopos(4,17); lcd_writetext (texte); //Ausgabe der GradZahl } komma_vorheriger=komma; //der aktuelle Temp_wert wird gesichert, damit dieser im nächsten Druchlauf zum Vergleich herangezogen werden kann wie kann ich denn diese beiden Werte auf einen Unterschied von größer gleich 1 vergleichen? Wenn ich den Doublewert beispielsweise in int umrechnen könnte, dann würde der Vergleich funktionieren. Seid ihr bitte so nett und macht mir einen Vorschlag? Vielen Dank im vorraus und viele Grüße, Mathias.
Matze05 schrieb: > ich habe einen Temperaturwert im doublewert berechnet. Das ist schon mal keine gute Idee. Mach lieber eine Integer-Rechnung.
Matze05 schrieb: > Wenn ich den Doublewert beispielsweise in int umrechnen könnte, dann > würde der Vergleich funktionieren. Nö. Das Problem ist daß der gespeicherte Wert erst dann überschrieben werden darf wenn auch die LCD-Anzeige ein update hatte. Gruß Anja
Matze05 schrieb: > m Vergl Anja schrieb: > Nö. > > Das Problem ist daß der gespeicherte Wert erst dann überschrieben werden > darf wenn auch die LCD-Anzeige ein update hatte. > > Gruß Anja Hallo Euch beiden, vielen Dank für Eure Hilfe. Ja, die beste Idee ist es eine Integerrechnung aufzumachen. Das werde ich auch gleich tun. :-) Dennoch verstehe ich Deine Antwort nicht ANja. Der gespeicherte aktuelle Tem_wert in der Variable Komma wird doch erst nach der Ausgabe am LCD-Display in der vAriable komma_vorheriger gesichrt. if (abs(komma_vorheriger-komma)>=1) //Schreibe nur aufs LCD-Display, wenn sich der Wert um mindestens 1°C verändert hat { lcd_gotopos(4,17); lcd_writezahl (komma); //Ausgabe der GradZahl } komma_vorheriger=komma; //der aktuelle Temp_wert wird gesichert, damit dieser im nächsten Druchlauf zum Vergleich herangezogen werden kann Viele GRüße, Matthias.
Was Anja meint: (ich musste auch erst 3 mal überlegen, bis der Groschen gefallen ist) Dein Problem liegt hier
1 | if (abs(komma_vorheriger-komma) >= 1 ) // Schreibe nur aufs LCD-Display, |
2 | // wenn sich der Wert um mindestens 1°C verändert hat
|
3 | {
|
4 | dtostrf((komma), 2,0, texte); |
5 | lcd_gotopos(4,17); |
6 | lcd_writetext(texte); //Ausgabe der GradZahl |
7 | }
|
8 | |
9 | komma_vorheriger = komma; //der aktuelle Temp_wert wird gesichert, |
du darfst komma_vorheriges nur dann auf komma setzen, wenn du auch tatschlich einen neuen Wert ausgegeben hast. Denn du willst eigentlich nicht dann ausgeben, wenn sich die Temperatur zwischen 2 hintereinander folgenden Messungen um 1 Grad verändert. Du willst updaten, wenn sich eine gemessene Temperatur von der auf der Anzeige angezeigten Temperatur um mehr als 1 Grad unterscheidet! Das ist aber etwas anderes. Die am LCD angezeigte Temperatur stammt ja nicht notwendigerweise aus der vorhergehenden Messung. Nenn die Variable einfach um in komma_auf_anzeige, dann wird dir das klarer. Deine Temperatur kann zb so wachsen: 21.1 21.2 21.3 21.4 21.5 21.6 21.8 22.4 22.8 23.1 In keinem einzigen Schritt deiner Messungen hat sich die neu gemessene Temperatur um mehr als 0.4 Grad gegenüber der vorhergehenden verändert. Trotzdem möchtest du aber sicher haben, dass die Anzeige von 21 auf 22 umspringt. Das ist aber was anderes: 22.4 hat einen größeren Unterschied zu 21.1 als 1.0. 21.1 war aber die letzte Zahl, die zu einer Anzeige geführt hat, während die zu 22.4 vorhergehende Messung 21.8 war. Wieso heißt das eigentlich alles 'komma'? Ich denke das ist eine Temperatur? Dann nenn es doch auch irgendwas mit temperatur.
Hallo, dake für Eure Antworten. Komma hieß die Variable in meinem Buch aus dem ich den Code übernommen habe. Ich bin jetzt gerade dabei den Code in integerrechnung umzuschreiben. Spart Speicher und wohl auch Rechenzeit. Dann löse ich das Vergleichsproblem mit Euren Tipps. Habe den Hinweis von Anja jetzt verstanden. Ich muss den angezeigten Wert der Temperatur speichern und dann mit dem neu gemessenen Vergleichen. :-) Viele Grüße, MAtthias
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.