Ich denke nicht, dass es möglich ist zu implementieren, da das Arduino keine interne Uhr hat.
BEARBEITEN: Es ist möglich, die millis () -Funktion zu verwenden, um die Zeit seit dem Start des Boards zu berechnen:
> %Vor%Probieren Sie die Metro-Bibliothek aus, mit der Sie wiederkehrende zeitgesteuerte Ereignisse durchführen können. Sie können die Frequenz des Timers innerhalb der Schleife ändern, wenn das wünschenswert ist.
Es gibt viele Versionen dieser Timer-Routinen. Alle setzen voraus, dass Sie die Timer-Variable aus millis () zurücksetzen, wenn Sie das Zeitlimit erreicht oder überschritten haben. Falsch. Was, wenn Sie beschäftigt waren und weit über den Zeitschlitz hinaus sind ... das Los ist jetzt gestreckt worden.
Also sagen wir, dass wir alle 50ms etwas machen wollen. Sagen wir, wir wurden aufgehalten und es ist nun 55ms nach der letzten Überprüfung .. wir überprüfen ... wir überschreiben die Timer-Variable, so dass wir eine Übereinstimmung in 50ms bekommen. aber jetzt sind wir 5ms zurück. Wir müssen kompensieren, dass wir zu spät kommen und was passiert, wenn es an diesem Punkt einen Überlauf gibt ...
Ein Timer, der einen Neustart des Arduino überleben wird, ist ohne externe Teile unmöglich zu implementieren. Das Problem ist, dass es keine Möglichkeit gibt herauszufinden, wie lange der Reset ausgelöst wurde. Außerdem kann der Bootloader während des Neustarts eine unbekannte Zeit benötigen. Sie benötigen also eine externe Echtzeituhr.
Was die Periodenausführung von Ereignissen betrifft, ist meine Lieblingsbibliothek msTimer2. hier einige meiner Beispiele:
Mein Freund delay () und delayMicroseconds () helfen Ihnen dabei.
Soweit andere Antworten betroffen sind.
mills () - Gibt die Anzahl der Millisekunden seit dem Start des aktuellen Programms durch das Arduino-Board zurück. Diese Zahl wird nach ungefähr 50 Tagen überlaufen (zurück auf Null).
Siehe: Ссылка
Ähnlich,
micros () - Gibt die Anzahl der Mikrosekunden zurück, seit das Arduino-Board das aktuelle Programm gestartet hat. Siehe: Ссылка
Ich denke, Sie müssen an diesen beiden ein wenig arbeiten, um in Ihrem Fall zu arbeiten.
Die Funktion millis()
funktioniert normalerweise gut genug dafür, es sei denn, Sie möchten, dass die Zeitüberschreitung einen Neustart des Arduino überlebt.
Ich würde eine Timer-Klasse implementieren, die verfolgt, wann some_condition
zuletzt erreicht wurde:
Solange some_condition
nicht erfüllt ist, wird der last_set
-Wert des Timers nicht aktualisiert. Dies führt schließlich dazu, dass check()
true
zurückgibt (einmal pro Intervall, da check()
den last_set
-Wert festlegt)
Wenn die Überprüfung einen Prozessor-Reset überstehen muss, benötigen Sie eine batteriegestützte (Echtzeit-) Uhr und speichern und laden last_set
aus dem EEPROM.
Tags und Links arduino