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