Bonjour,
Je travaille avec une Arduino (plus précisément, une Controllino MAXI Automation) et j’ai un code de ce genre :
unsigned long MAX_DELAY_BETWEEN_INT = 3600000; // 1h
unsigned long lastIntTime = 0;
void sendAlert() {
Serial.println("Alert!");
}
void interrupt() {
lastIntTime = millis();
}
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(0), interrupt, RISING);
}
void loop() {
if (millis() - lastIntTime > MAX_DELAY_BETWEEN_INT) {
sendAlert();
}
delay(200);
}
Or je reçois des alertes dont je suis certain qu’elles ne devraient pas avoir lieu (parce que je peux m’assurer que le délai entre deux interruptions n’a pas pu dépasser une heure). Elles ne semblent pas suivre de motif particulier.
Je me demande alors si le problème ne viendrait pas de la ligne 9 (lastIntTime = millis();
), avec une valeur de millis()
plus faible que la réalité parce que les bits de poids fort n’ont pas eu le temps d’être écrits, comme expliqué ici.
Quand je cherche arduino millis interrupt
, je ne tombe que sur des questions au sujet des calculs de durée et non pas au sujet de l’heure à laquelle l’interruption a eu lieu.
Merci.