Hallo,
ich habe eine Frage ist vielleicht eine Lösung gibt mit man ein Programm warten lassen kann vis es weiter machen soll !?
Ich habe das so gelöst gibts da vielleicht ein andere Möglichkeit?
delay(43200000); //12 Stunden wird gewartet
Hallo,
ich habe eine Frage ist vielleicht eine Lösung gibt mit man ein Programm warten lassen kann vis es weiter machen soll !?
Ich habe das so gelöst gibts da vielleicht ein andere Möglichkeit?
delay(43200000); //12 Stunden wird gewartet
Ja, mit millis()
Oder rtc
Hi
Wobei man vll. erwähnen sollte, daß millis() selber überhaupt nicht wartet.
Auch eine rtc gibt Einem nur die aktuelle Uhrzeit zurück (oder man löst einen Alarm-Interrupt aus, geht auch).
Nicht, daß Das nicht selbsterklärend wäre: Eine rtc (real time clock -> Echtzeit Uhr) muß natürlich irgend wann die aktuelle Uhrzeit nebst Datum bekommen haben.
Wenn Das nicht gewünscht ist, gibt es noch DCF77 und GPS - Welche aber auch nicht selber warten sondern auch 'nur' die aktuelle Zeit ausgeben können.
MfG
@postmaster-ino: Was sollen RTC, DCF77 oder GPS mit der Realisierung einer Wartezeit mittels millis() zu tun haben?
@manuel20134: Schau Dir in den Beispielen der IDE mal BlinkWithoutDelay an und suche nach der Nachtwächtererklärung.
Gruß Tommy
Hi
Auch Mal zwischen den Zeilen lesen.
Was hat, im Gegenzug, millis() mit Warten zu tun?
Genau: ebenfalls Nichts.
Du bekommst dadurch (wie RTC, GPS, DCF77) nur eine aktuelle 'Zeit', Welche in allen vier Wegen (also millis() noch dazu) mit einer Endbedingung verglichen werden muß.
Viele Wege führen nach Rom, aber nur delay(); wartet dabei selbstständig - wenn wohl auch im Quellcode dort ebenfalls nur eine simple Schleife verwendet wird, Die auf eine Endbedingung prüft und dann dem Programm wieder die Kontrolle übergibt.
MfG
Ob nun mit millis, RTC oder andere Funktionen gewartet werden soll/darf, hängt sehr von der gesamten gewünschten Anwendung ab.
Wichtig wäre hier zu erwähnen, mit delay wird nicht nur gewartet, sondern der Controller macht in dieser Zeit überhaupt nix.
Er reagiert noch nicht mal auf einen Tastendruck.
Also ist dies die denkbar schlechteste Lösung.
Interessant wäre noch, warum und worauf soll er warten.
Evtl. gibt es da noch eine bessere Lösung w.B. mit einem Timer.
HotSystems:
... der Controller macht in dieser Zeit überhaupt nix.
Fast nichts, denn er reagiert auf Interrupts, wie dieses kleine Testprogramm zeigt:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Gib was ein und warte zehn Sekunden!");
delay(10000);
while (Serial.available()) {
char zeichen = Serial.read();
Serial.print(zeichen);
}
Serial.println();
}
HotSystems:
Also ist dies die denkbar schlechteste Lösung.
Ein µC, der nichts zu tun hat, kann auch mittels delay nichts tun.
HotSystems:
Interessant wäre noch, warum und worauf soll er warten.
Und wie genau die Wartezeit eingehalten werden muß. Für ungenau geht millis, für genauer könnte eine temperaturkompensierte Uhr (DS3231) ins Blickfeld rücken.
agmue:
Fast nichts, denn er reagiert auf Interrupts, wie dieses kleine Testprogramm zeigt:
Ok...ok...ich wollte es nicht noch komplizierter machen.
Oder ihr solltet ja auch noch was zum Schreiben haben.
![]()
Och, so schlimm finde ich das auch nicht, wenn da so ein delay() vor sich hin trampelt.
Außerdem kann man ja in yield() noch viel Unsinn machen, der einem sonst noch einfällt.
Außer das dely() abbrechen, das geht nicht (auf schöne Art).
Wenn der Arduino in der Wartezeit nichts tun soll, dann ist delay() auch eine mögliche Lösung. Solle der Arduino aber auf etwas reagieren, wie einen Sensor oder einen Tastendruck, dann funktioniert das mit delay() nicht. Dann muß es mit millis() gemacht werden.
Natürlich geht es auch mit einer RTC oder einem DCF77 Empfänger oder anderer externer Elektronik. Aber wozu externe Elektronik wenn der Arduino es alleine genügend genau machen kann?
Grüße Uwe
Jetzt diskutieren wieder die selben wie immer über das selbe. Ich finde das ja auch unterhaltsam, aber der TE hat sich seither nicht mehr gemeldet zum rückfragen. Mit 25 Posts und über einem Monat mitlesen, dachte ich, er weiss wie es hier geht und mit 2 Stichworten könnte er schon weiterkommen und eine praxistaugliche Lösung finden. Stattdessen wird über interrupts in delays und gps oder dcf77 geschrieben. Was bitte wollen wir einen Neuling (gehe mal von aus aufgrund der Fragestellung) damit sagen?
millis() als Schätzeisen, RTC wenns genauer sein muss. Immerhin geht es um 12 Stunden.
Ja!
Ohne mehr über Aufgabe/Problem/Warum zu erfahren, weiß ich auch nichts mehr zu sagen.
Die richtigen Stichworte wurden genannt.
Der Link zum Nachtwächter steht auch....
Hallo,
Das soll für eine automatische Bewässerungsanlage sein dass alle 12 Stunden gestartet werden soll!
Kann ich das ja auch verwenden oder ist das nicht so gut??
delay(43200000); //12 Stunden wird gewartet
Oder gibt es einen Timer für 12 Stunden?
Es gibt RTC mit Alarmausgang.
Wie schon gesagt wurde:
Wenn nur gewartet werden soll, dann kannst du das so tun.
Wenn immer Punkt 12 Uhr gewässert werden soll, bedarf es anderer Tricks, damit sich der Zeitpunkt nicht verschiebt. z.B. einen Uhrenquarz am Arduino.
Soll noch was anderes erledigt werden, dann halte dich an den Nachtwächter.
Bei solch langen Wartezeiten, kannst du den Arduino auch in den Schlaf schicken.
manuel20134:
Oder gibt es einen Timer für 12 Stunden?
Und warum machst du das nicht mit einer Arduino-Schaltuhr ?
Nimm eine RTC und vergleiche immer die Zeit, alle 12 Stunden.
Dann hast du auch keinen Zeitversatz, wenn mal kurz Stromausfall ist.
Wie wichtig ist es, dass das Bewässern z.B. "ungefähr zu Mittag" erfolgt oder "nicht in der Nacht"?
Soll das eine längerfristige Lösung sein oder nur während eines Urlaubs von z.B. 2 Wochen?
Warum ich frage?
Weil Lösungen mit delay oder millis nicht allzu genau sind und sich deshalb der Bewässerungszeitpunkt im Laufe der Zeit deutlich verschieben wird (Größenordnung etwa: Stunden pro Jahr).
Wenn das also ein Problem ist, so muss man an Lösungen mit Echtzeituhr (RTC "Real Time Clock) oder andere denken.
manuel20134:
Hallo,
Das soll für eine automatische Bewässerungsanlage sein dass alle 12 Stunden gestartet werden soll!
Kann ich das ja auch verwenden oder ist das nicht so gut??delay(43200000); //12 Stunden wird gewartet
Der Arduino reagiert in der Zeit auf nichts als den Resettaster und unterbrechen der Stromzufuhr. Wenn du die Bewässerung manuell vorziehen oder verschieben willst, gibt es keine Möglichkeit in das Programm einzugreifen.
Ließ dich in die Zeitsteuerung mit millis ein. Millis entspricht einer Uhr. Von der Idee her programmierst du, dass der Arduino regelmäßig die Uhr prüft und wenn genug Zeit vergangen ist, startet er die Bewässerung. Zwischen den Zeitprüfungen kann sich der Arduino andere Aufgaben widmen, wie Tastenabfragen für eine manuelle Änderung. Auch kann man während der Wartezeit eine Led blinken lassen, so dass man weiß, dass der Arduino arbeitet und nicht abgestürzt ist.
Da der Arduino gewöhnlich nur einen Resonator und keinen Quarz hat, geht er pro Tag leicht mehrere Minuten falsch. Eine RTC (DS3231) wäre für deinen Zweck sehr gut geeignet, da so die Bewässerung immer zur gleichen Zeit startet.
Denke aber daran, alle Lösungen ohne batteriegepufferter RTC verlieren die korrekte Zeit bei einem Stromausfall.
Dann stimmt deine Einstellung nicht mehr.
Vielen Dank für eure Hilfe hat mir wirklich sehr weitergeholfen! ![]()
Habe ich noch eine kleine Frage muss man den Arduino mit einem Lüfter kühlen im Sommer oder ist das egal das heiß wird?