Hallo Arduino Freunde,
vorab, ich bin ganz neu was Arduino angeht, habt also erbarmen wenn es Fehler gibt
Zu meinem Vorhaben:
Ich baue eine neue Terrariumsteuerung mit einem Arduino UNO.
Ein Sensor liest die Feuchtigkeit und Temperatur, diese wird in einem LCD Display + Serieller Monitor angezeigt.
Die Hintergrundbeleuchtung des Displays soll über einen Taster, für eine bestimmte Zeit angehen.
Geschaltet werden sollen ein Brunnen für eine bestimmte Zeit, 2 Lampen nach Uhrzeit und davon eine zusätzlich nach Temperatur.
Meine Probleme:
Sketch läuft an sich ganz gut, aber sobald der Timer für den Brunnen an ist oder die Zeit für die Hintergrundbeleuchtung an ist, pausiert der restliche Sketch.
Ich versteh ja auch wieso, aber geht es auch das es zusammen läuft und nicht alles pausiert?
Gleiches Problem beim drücken des Tasters, da der Sensor nur alle 10 Sekunden gelesen werden soll, muss man den Taster teilweise 10 Sekunden drücken bis die Beleuchtung des Displays angeht.
Letztes Problem mit der Schaltung der Lampen. Über Uhrzeit funktioniert, aber über Temperatur habe ich Probleme.
Es wird nicht immer zur richtigen Temperatur ein-/ausgeschaltet, z.B. ein bei 24,5°C (obwohl 25 vorgegeben ist) und aus erst wenn die Temperatur schon über 27°C war und dann abkühlt bis 26,5°C.
Kann man das irgendwie beheben, da dieser Fall im richtigen Einsatz sehr schlecht wäre, da es nicht abkühlen kann sobald die Wärmelampe erstmal an ist.
Ich habe mich bei meinem Sketch an einem von jurs, vor 3 Jahren hier geposteten Sketch orientiert und diesen erweitert.
Ich hoffe ihr versteht meine Probleme und könnt mir Helfen.
Bisheriger Sketch ist in der Textdatei, da er zu groß zum Posten war.
Also das mit dem delay wusste ich ja, aber ich wusste keine Alternative, ich probiere das mal mit der Funktion millis.
Danke dafür schon mal.
Und was ist mit dem Problem der Temperaturschaltung?
Shane93:
Also das mit dem delay wusste ich ja, aber ich wusste keine Alternative, ich probiere das mal mit der Funktion millis.
Danke dafür schon mal.
Und was ist mit dem Problem der Temperaturschaltung?
Du kannst das Auslesen des Sensors auch per Timer steuern.
Suche mal hier im Forum nach "combie Timer" oder nach simple Timer.
Das mit der Temperatursteuerung muss ich mir nochmal ansehen.
Also ich habe die Funktion millis mal ausprobiert und ich kriege es einfach nicht hin das einschalten der Hintergrundbeleuchtung und das Auslesen des Sensors darüber zu steuern.
Könnte mir eventuell jemand helfen?
Shane93:
Also ich habe die Funktion millis mal ausprobiert und ich kriege es einfach nicht hin das einschalten der Hintergrundbeleuchtung und das Auslesen des Sensors darüber zu steuern.
Könnte mir eventuell jemand helfen?
Dann nimm einen Timer wie in meinem Post #3 beschrieben.
Das mit den millis() solltest du aber unbedingt lernen, wird häufiger gebraucht.
HotSystems, ich werd mir das wohl mal in einem kleinen Sketch angucken müssen, meiner ist dafür für den Anfang zu groß, das krieg ich nicht hin, da ich wie gesagt noch Anfänger bin, versteh ich einiges noch nicht so richtig.
Und noiasca, was der Code machen soll hab ich doch am Anfang geschrieben.
Da wäre vielleicht hinzuzufügen das der Brunnen z.B. um 11 uhr für 3 Stunden angehen soll. Aber der rest steht doch. Ich weiss nicht so wirklich was du noch meinst, meine Probleme stehen ja auch da.
Shane93:
HotSystems, ich werd mir das wohl mal in einem kleinen Sketch angucken müssen, meiner ist dafür für den Anfang zu groß, das krieg ich nicht hin, da ich wie gesagt noch Anfänger bin, versteh ich einiges noch nicht so richtig.
.....
Das brauchst du nicht.
Setze deine Routine zum Auslesen des Sensors in eine Funktion und starte diese Funktion mittels Timer.
Es geht nicht darum, daß Du hier zum x.ten Mal erzählst, was Du gerne vor hast, sondern, daß Du Dir Das AUFMALST, so richtig mit Papier und Bleistift - wie in der Grundschule!!
Dabei wirst Du selber sehen, daß einige Dinge SO nicht klappen KÖNNEN, Andere werden von Entscheidungen abhängen, Die eigentlich erst später getroffen werden und so Zeug.
Aber: Keine Angst, mache ich auch viel zu selten und verhaspel mich dann in der Programmiererei, weil's ja eigentlich ein triviales Problemchen ist ...
Shane93:
Ich versteh was gemeint ist, ich seh ja auch meine Probleme im Code, aber ich habe keine Ahnung wie ich z.B. einen Timer ins Programm baue.
Dann sieh dir doch die Beispiele zu den jeweiligen Libraries an.
Die Namen hatte ich doch schon genannt.
Z.B. diesen hier, da er sehr einfach zu bedienen ist. https://playground.arduino.cc/Code/SimpleTimer
eigendlich solltest Du Deinen Sketch mal in Code Tags setzen das Symbol dazu findest Du oben links </> damit die Leute den auch sehen können. viele laden nicht gerne einfach was runter, es soll ja so böse Tierchen geben.
ich hab da mal einen Blick reingeworfen ich denke es scheitert an der Sruktur für das Relais. Das gibts einmal Du brauchst aber ja eigendlich 3 davon. Vorschlag mach alles neu , dann kannst Du es auch verstehen.
was Du ja anscheinend willst ist, zu bestimten Uhrzeiten bestimte Dinge einschalten,Auschalten willst Du das nach Ablauf einer Zeit oder auch wieder zu bestimten Urzeiten.
die Beleuchtung des Display soll mit Taster angehen und nach Zeit wieder aus.
Der Brunnen soll Uhrzeitabhängig eingeschaltet werden und ebenfalls nach Ablauf einer Zeit wieder aus , oder ebenfalls bei einer bestimmten Uhzeit.
Ich will jetzt Deine Aufgabenstellung nicht im einzelnen wiederholen, aber wie bereits gesagt solltest Du die Aufgabe in Teilaufgaben zerlegen und die dann einzeln angehen und einzeln testen. Es sind ja alles einzelne Aufgaben die bis auf ein paar Bedingungen nichts miteiander zu tun haben. Zur Realisierung der Timer kannst Du Hilfsmittel benutzen. Da sind dir schon Vorschläge gemacht worden.
Du hast doch schon eine funktionierende Konstruktion mit millis() und altmillis drin, verstehe was da passiert , dann kannst Du sowas auch zum einlesen des Sensors benutzen und für die Relais.
Also fang mit dem Sensor an, dann das Display dazu, dann der Taster mit dem Timer für die Beleuchtung. Wen das klappt kümmerst du dich um die RTC und darum das Du zu einer bestimmten Uhrzeit einen Ausgang (Brunnen ) einschalten kannst und nach Ablauf einer Zeit (millis()-einschaltzeit > delayzeit) wieder aus . Zum Einschalten bei einer bestimmten Uhrzeit kann man das so machen wie in Deinem Sketch
aktSunde*100+aktmin und das mit einem Vergleichswert z.B 730 für 7:30 vergleichen. Da gibts verscheiden Möglichkeiten.
Wenn das klappt erweiterst Du das für die beiden anderen Ausgänge (Lampen). Für Eine lampe benötist Du dann noch eine ODER Verknüfung für den Temperaturwert.
aber man kann doch um einen leicht lesbaren Vergleichswert zu haben so vorgehen.
z.B
um 7:30 willst Du ewas auslösen der abfragewert dazu ist 730 (kann man gut lesen, eingeben )
die Urzeit berechnen hh*100+mm und fragst dann auf 730 ab.
Natürlich muss man aufpassen ein Wert von 790 als Uhrzeit 7:90 gibt es nicht.
richtiger ist natürlich 2 byte zu nutzen und die zu verunden oder richtig zu rechnen
hh*60+mm dann ergibt sich für 7:30 als Sollwert aber die zeit 450min ( seit 0:00) Muss man dann halt für jeden gewünschten Schaltpunkt erst mal rechnen.
Renter, ich konnte den Code hier nicht rein stellen, weil er zu viele Zeichen hat, deswegen musste ich das als Datei machen.
Aber ich werde deine Beschreibung mal die Tage testen und bedanke mich dafür schon einmal.
Was passiert eigentlich bei der Funktion millis(), wenn die Zeit überläuft?
Shane93:
Was passiert eigentlich bei der Funktion millis(), wenn die Zeit überläuft?
Das wurde hier im Forum schon mehrfach bis zum Erbrechen diskutiert. Nutze einfach die Suchfunktion.
Kurzfassung: Wenn Du es richtig machst, funktioniert es auch dann.