Arduino Wertwechsel erkennen?
Hallo zusammen. Ich hab mit mit meinem Arduino Mega einen Wecker gebaut der auf einem TFT-Touchdisplay auch die Temperatur anzeigen lässt. Damit ich jedoch erkenne wenn sich die Temperatur ändert, muss ich die Tempabfrage dauerhaft in einer Schleife laufen lassen und somit den Wert alle Millisekunden auf dem Display überschreiben auch wenn er sich nicht ändert. Das läsdt die Zahlen auf dem Display "flackern" was unschön aussieht. Kann ich mit einer Funktion eine Temperaturänderung erkennen und nur dann den Wert neu schreiben lassen, wenn sich die Temp ändert?
Im Bild das ausgegraute nicht beachten, das war die Version in der der Wert alle paar Millisekunden überschrieben wird. Mein Versuch mit der if-Schleife funktioniert leider nicht so wie gehofft (aktuelltemp != Temp).
Wäre super wenn jemand eine Lösung hat.
So ist dann die Lösung. Zuerst Globale Variable "float aktuelltemp;" initialisieren. (Auf dem Bild nicht zu sehen.)
Dann im Loop die if-Schleife anschreiben und am ende der if-Schleife mit aktuelltemp=Temp; die akteulle Temperatur mit der Temp des Sensors gleichsetzten. Dann wird auf dem Display nur bei Tempänderung überschrieben.
3 Antworten
Naja, Du setzt vor dem if ja aktuelleTemp auf Temp - somit gilt niemals aktuelleTemp != Temp. Du müsstest aktuelleTemp zu einer globalen Variablen machen und diese im if-Block setzen.
könntest du nicht (sofern du keine anderen Befehle ausführen willst außer Temperatur anzuzeigen) einfach eine Schleife machen, die danach testet, ob sich die Temperatur geändert hat?
also:
temp messen, in temp speichern
loop
wenn temp messen genau so groß wie temp: tue nichts
wenn nicht: erneuere die Anzeige
das wäre meine Idee, ich hoffe du kannst damit etwas anfangen :-)
Das Wesen eines Arduino-Programms ist es gerade, dass die loop-Funktion wiederholt aufgerufen wird. Diese sollte auch relativ zügig abgearbeitet werden. Daher sollte in der loop-Funktion kein weiterer "Endlos"-Loop vorkommen.
Ja natürlich. if verzweigung undso.
Aber so gehts es natürlich nicht weil du in der zeile genau vor der if verzweigung doch aktuelltemp = Temp setzt, wie sollten die also dann nicht gleich sein?
Alternativ aktualisierst du den display einfach seltener. So, jede sekunde oder so.
Ja genau der Fehler ist mir auch gerade aufgefallen. Die if schleife sieht so aus: if(aktuelletemp != Temp){tft.fillRect(...);
tft.print(Temp);
.....
aktuelletemp = Temp;}
Manchmal scheiterts an den einfschsten Dingen :)