Alternative a la fonction Delay

Bonjour,

Voila, supposons un programme destiné a fonctionné 24/h24, 365j/365 et qui doit afficher sur un afficheur lcd des données toutes les 5 minutes (cest un exemple, pas grand intérêt).

On peut utiliser la fonction delay dans la boucle :

debut de la boucle

delay(300000);
affichage de l'info

fin de la boucle

mais le problème c'est que lorsque la fonction delay est en train de se dérouler, plus aucune action n'est possible.

Or, je voudrais qu'en appuyant sur un pushbutton, le programme affiche les données, donc "débloque" en quelque sorte l'attente de 5 minutes.

J'ai vu qu'il y a avait la fonction milli() qui donne le temps écoulé depuis le lancement du programme. Est-ce le temps depuis que le board est branché ou bien le temps depuis le début de la boucle (void loop) ?

Car si cest le temps depuis le branchement du Arduino, un programme avec la fonction milli() va bloquer au bout de 50 jours.

Bref, quelle alternative a Delay (= permettre un déblocage de l'attente)

D'avance merci !

En enfermant ton programme dans un boucle comme ça :

void loop{
time=millis()-oldtime;

if (time>300000){

ton programme;

oldtime=millis();

}
}

Oui ok mais le pb cest que milli() au bout de 50 jours retourne a 0 donc il y aura bug, non ?

ya pas moyen de remettre milli() à zero au debut de chaque boucle ? ;D

lorsque millis() passe à 0, oltime sera plus grand que millis().

Fait une fonction de test qui te remettra oltime à 0 zéro dans ce cas.

Le plus simple est d'utiliser un timer pour gérer les secondes, minutes, heures écoulées. La librairie MsTimer2 est faite pour ça (voir le playground) : il y aura deux boucles. La boucle du timer qui va incrémenter les compteurs, et la boucle classique "loop" qui va tester s'il est temps d'agir et ne sera pas bloquante.

Mais j'ai dit "le plus simple" et pas "le mieux" car il y aura une dérive du fait que l'horloge de l'Arduino ne divise pas parfaitement le temps. Il est donc préférable pour un projet qui doit fonctionner pendant 1 an d'utiliser une horloge externe RTC (Real Time Clock). Il en existe de très simple en I2C (exemple : Horloge RTC et calendrier I2C - PoBot)

C'est une bonne solution la RTC, je n'y pensais pas.

Ok, merci pour l'info RTC c'est sympa. Ya du boulot en perspective pour moi !