Hallo.
Ich habe mir ein Programm geschrieben zum Auslesen eines DS18B20. Dieser Wert wird per OLED angezeigt und bei MQTT an die Steuerung weitergegeben.
Ab einem gewissen Schwellwert oder einem MQTT-Eingangssignal soll ein Ausgang kurz geschaltet werden.
Nun habe ich folgende Probleme.
Wird der Schwellwert per MQTT erreicht, kommt zwar nur ein Impuls, wird der Schwellwert aber unterschritten kommt erneut ein Impuls.
Wird der Schwellwert per Sensor erreicht (temp>26), pulsiert der Ausgang die ganze Zeit und ich weiß nicht wie ich das mit dem letzten Zustand umsetzen soll. Mit lastState hat´s nicht geklappt.
Aus diesem ersten Impuls heraus soll 5s später ein zweiter Impuls über einen weiteren Ausgang kommen, auch nur einmalig.
Vielleicht könnte mir jemand Hilfestellung geben. Danke.
Dazu gibt´s aber nix zu ergänzen. Variablendeklaration sollte ja klar sein.
Außer dem Loop gehört nix zur gewünschten Funktion, außer vielleicht das noch:
Danke fĂĽr die schnelle Antwort. Warum wird ein constexpr verwendet ?
Die ABhängigkeit von z.B. switchtemp wäre ja bei mir (temp > 26). Darf das in die Deklaration mit rein, obwohl der Sensor ja erst später im Programm abgefragt wird ?
Das mit dem lastState fĂĽr die MQTT-Message kann so bleiben ?
Weil ich das grade so vor 5 Minuten geschrieben hatte.
Ja.
Dann tausche 31 gegen 26.
Alles, für was Du während der Initialisierung keinen Variablenspeicher reservieren musst, ist gut.
Der Sketch oben kompiliert fĂĽr einen UNO:
Der Sketch verwendet 806 Bytes (2%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 10 Bytes (0%) des dynamischen Speichers, 2038 Bytes fĂĽr lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
Das Selbe - nur das die switchTemp als Variable EINMALIG im setup() gesetzt wird:
Der Sketch verwendet 812 Bytes (2%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 11 Bytes (0%) des dynamischen Speichers, 2037 Bytes fĂĽr lokale Variablen verbleiben. Das Maximum sind 2048 Byt
Ich komme aus der IEC-Programmierung und da werden Zahlenwerte an der Stelle genutzt, wo sie gebraucht werden. Man gibt Ihnen keinen Variablennamen, um dann später wieder Bezug darauf zu nehmen. Speicherplatz für Variablendeklaration galt es einzusparen.
Zusätzlich, dass dies kein RAM oder Speicher mehr verbraucht.
Es lässt sich Zentral der Wert ändern. Vor allem wenn du diese Magic Number mehrmals als Vergleich nutzt, musst du den Wert der Konstante nur an einer Stelle ändern, wenn du ihn ändern wölltest, und nicht an vielen Stellen im Code.
Ok, die letzten beiden Argumente lasse ich gelten
Hab´s jetzt so geändert.
Und nochmals danke an @my_xy_projekt, der Code zur Steuerung der Klima funktioniert nun einwandfrei. Nun kann alles ins Gehäuse eingebaut werden.