Problème avec mode Sleep Arduino MKR + millis()

Bonjour à tous,

J'ai un petit problème avec un programme que je développe pour une sonde de température + détecteur de mouvement avec une bord Arduino MKR 1010.

En gros, je capture la température toute les 10 Minutes avec un sleep du module avec la commande, qui marche bien et je n'ai pas de problème : LowPower.sleep(delaySleep);

J'ai rajouté un morceau de code, pour que le module soit réveillé, lors d'une détection de mouvement :
LowPower.attachInterruptWakeup(digitalPinToInterrupt(MotionSensorPin), comptageMotion, CHANGE);

Je me suis rendu compte, que ce code fait sortir le module du mode Sleep, même s’il reste du temps, donnée dans l’argument avec la commande "LowPower.sleep(delaySleep)" et relance la fonction Loop.

J'ai donc une condition suivante, qui permet d'envoyer à intervalle régulier (toutes les 10 minutes), les données :

void loop() {

if (millis() >= SendTime){
SendTime =+ SendTimeInter;

// Code envoie des données
}
}

Le problème, c'est que je me suis rendu compte, que la fonction millis(), ne marche plus quand le module est en Sleep, donc quand le module sort du mode Sleep, il ne rentre jamais dans la condition.

Le problème est dû à la détection de mouvement, il réinitialise tout le temps la mise en sommeil avec la commande "LowPower.sleep(delaySleep)", et donc n'envoie jamais les données.

Je tourne en rond avec cette problématique.

En gros, j'aimerais que le module envoie toutes les 10 minutes, les données et qu'à chaque fois qu'il détecte un mouvement, il incrémente une variable. Mais j'ai besoin d'une gestion de l'énergie, car le module sera sur batterie.

Auriez-vous une piste d'idée ? Ou n'est pas possible avec la gestion d'énergie ?

J’espère être clair … et avoir donnée suffisamment d’info, sans vous noyer avec mon code source … que je peux vous communiquer sans problème.

Merci

au lieu de millis() Vous pourriez explorer l'usage de la RTC interne de votre MKR 1000 (il y a une librairie) --> alimentez la RTC par une petite pile d'environ 3V à travers une diode de protection sur la pin 3.3V pour qu'elle fonctionne même en cas de sleep - ça vous donnera une référence de temps 'absolu'

(j'ai jamais essayé - dites nous si ça marche)

Bonjour,

Une bonne piste effectivement.

Je test dans la semaine.

merci beaucoup