Ich versuche, eine kleine Tür zu öffnen und zu schließen, die sich alle 12 Stunden öffnen oder schließen sollte. Ich habe mich gefragt, ob ich nur ein kleines Schleifenskript mit einer Verzögerung () für 12 Stunden und einer Verzögerung (43 200 000 000) erstellen könnte. Ich vermute? Ich habe jedoch keine Ahnung, ob dies möglich und / oder empfehlenswert ist. Einige Rückmeldungen / Alternativen (falls erforderlich) wären nett :)
arduino-uno
timers
Fred Pannekoek
quelle
quelle
Antworten:
Die Echtzeituhrmethode ist die genaueste Methode, wird aber ansonsten verwendet
millis
Dies verzögert sich bis zu ca. 4294967295ms (2 ^ 32-1) oder 49 Tage, danach holt der Timer den Wert von auf
startMillis
quelle
delay(LONG_DELAY_MS)
? Die Arduino-Implementierung akzeptiert vorzeichenlose Longs. Ich bin mir auch nicht ganz sicher, ob Ihr Code beimmillis()
Umwickeln korrekt funktioniert und kleiner ist alsstartMillis
delay()
hat seine Verwendung, aber für lange Verzögerungen ist es nicht gut. Es weist den Mikrocontroller einfach an, nichts fürx
Taktzyklen zu tun . Während dieser Zeit kann Ihr Arduino nichts anderes tun.Am besten verwenden Sie eine sogenannte Echtzeituhr (RTC). Diese Chips wurden speziell entwickelt, um die Zeit im Auge zu behalten, und Sie können sie problemlos mit Ihrem Arduino verbinden. Hier ist ein Beispiel, wie Sie das tun können.
quelle
Sie können den Watchdog-Interrupt verwenden und Ihre MCU während des Wartens in den Ruhezustand versetzen und Strom sparen.
Beachten Sie jedoch, dass Sie nur dann Strom sparen, wenn Ihr Board dies auch spart. Das bedeutet, dass Sie anstelle der üblichen Regler, mit denen die gängigsten Arduino-Boards wie das Uno ausgestattet sind, einen Regler für niedrige Ruhespannung benötigen. Ansonsten spielt es keine Rolle, ob Ihre MCU Energie spart, wenn Ihr Board dies nicht tut.
Hier ist der Code (ungetestet):
Der Code, den ich kopiert habe, stammt von dieser Seite: Arduino mit geringem Stromverbrauch unter Verwendung des Watchdog-Timers .
quelle
Haben Sie einen Schlaf (vorzeichenlose int Sekunden) zur Verfügung?
Wenn nicht, können Sie () sehr lange verzögern ():
quelle
Das wird funktionieren:
quelle
Ich benutze nur for-Schleifen, wenn ich nichts dazwischen machen möchte:
quelle
delay(43200000)
.