Eine Funktion nach der x-Zeit ausführen

8

Was kann ich verwenden, um eine Funktion in der Schleife auszuführen, wenn keine der anderen Bedingungen in der Schleife und ihr Code nach einer gewissen Zeit ausgeführt wurden? Kann es mit einer Verzögerung gemacht werden, oder gibt es eine andere Funktion?

    
Markaj 27.05.2012, 10:59
quelle

9 Antworten

9

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%     
nico_ekito 27.05.2012 11:05
quelle
5

Versuche Arduino-Timer-Interrupts. Keine Notwendigkeit für externe Bibliotheken oder sogar zusätzliche Hardware, da der Prozessor als eine Uhr betrachtet werden kann ... bei 16 MHz.

%Vor%

brauchen mehr Informationen über Interrupts?

    
mrv 16.08.2013 13:14
quelle
1

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.

    
Dang Khoa 29.05.2012 17:43
quelle
1

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 ...

    
Peter Scargill 25.06.2012 13:02
quelle
1

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:

Ссылка

Ссылка

Ссылка

    
Udo Klein 04.02.2013 18:09
quelle
1

Ich denke, das ist es wonach Sie suchen

Ссылка

    
Kreker 07.01.2013 15:28
quelle
1

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.

    
Zeeshan Ali 18.04.2013 07:06
quelle
1

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:

%Vor%

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.

    
Anthon 31.05.2012 18:51
quelle
1

Sie können den folgenden Beispielcode verwenden. Wiederholen Sie die Schritte für alle 1ms.

%Vor%     
AMPS 08.01.2014 12:42
quelle

Tags und Links