Ich habe das Arduino verwendet, um einige Daten aufzuzeichnen. In meiner Arduino-Skizze habe ich auch die millis()
Funktion verwendet, um den Zeitpunkt zu verfolgen, zu dem jeder von mir gemessene Wert gemessen wird. Mir ist jedoch aufgefallen, dass das Timing nicht korrekt ist. Zum Beispiel werden 30 Sekunden im wirklichen Leben nur als 10 Sekunden ausgegeben (erfundenes Beispiel).
Habe ich Recht, wenn ich sage, dass die Arduino-Verzögerungsfunktion die Zeiteinsparung beeinflusst millis()
? Mit anderen Worten, ich habe eine Verzögerung von 50 ms. Bedeutet das, dass die millis()
Funktion auch für diese Dauer stoppt und dann für die Dauer der Verbindung fortgesetzt wird? Ich bemerkte dies, als ich versuchte, einige Daten zu zeichnen und feststellte, dass die Häufigkeit der Peaks in meinen Daten angesichts der verstrichenen Zeit zu häufig war. Ich möchte also wissen, ob dies der Grund für diese Nichtübereinstimmung des Timings ist, und wenn ja, wie kann ich dies beheben, damit ich die Zeit behalten kann, zu der jede Probe auftritt?
Um hier einen Kontext zu geben, ist meine Skizze:
#include <eHealth.h>
unsigned long time;
// The setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
}
// The loop routine runs over and over again forever:
void loop() {
float ECG = eHealth.getECG();
time = millis();
Serial.print(time);
Serial.print(" ");
Serial.print(ECG, 5);
Serial.println("");
delay(50);
}
millis()
ist Interrupt-gesteuert, delay()
sollte sich also nicht darauf auswirken.