Il n'est pas souhaitable de remettre à zero la fonction millis().
D'autres librairies pourrais s'en servir et cela les perturberait.
Il vaut mieux apprendre à s'en servir correctement.
Le compteur utilisé par millis() est un unsigned long (entier non signé 32 bits).
Il suffit de mémoriser les valeurs de temps dans une variable du même type.
Ainsi les différences seront aussi effectuées sur 32 bits.
Contrairement aux maths où les nombres sont infinis, en informatique les nombres sont limités par la résolution.
Ainsi un entier non signé de 8 bit permet de compter de 0 à 255 et donc 255+1 = 0
Raisonnons sur 8 bits pour simplifier :
uint8_t t1, t2, diff; // prenons des entiers 8 bits non signés en considérant pour simplifié que millis() retourne ce type
t1 = millis(); // retourne par exemple 202
fonction_truc_qui_bouffe_du_temps();
t2 = millis(); // retourne pas exemple 4 (par ce que le compteur a rebouclé)
diff = t2 - t1;
Serial.print( diff );
Commbien de temps s'est-il écoulé ?
4 - 202 = ..... = 58
Car -198 n'existe pas en uint8_t.
Pour comprendre il faut revenir à la représentation binaire :
4 : 0000 0100
- 202: 1100 1010
= 0011 1010 = 58
Une autre façon de le voir c'est comme une piste de course circulaire :
Tu as de balises : 0, 1, 2, 3 .... 254, 255 et tu revient à 0
La distance entre 2 coureurs est toujours Posution2 - Position1 Modulo 256
C'est le modulo qui est important
Donc appliqué à millis() avec des unsigned long, ca marche tout seul, la différence de 2 dates te retournera toujours le temps écoulé entre les 2 dates même s'il y a eu un rebouclage du compteur.
A+