Pas de problème
, on a tous une vie en dehors de notre passion.
L'utilisation de millis() n'est pas si compliqué, et une fois qu'on a compris le principe, on peut l'utiliser pour faire beaucoup de chose en parallèle.
Je vais partir de l'exemple d'Eskimon.
temps = millis();
La fonction millis() retourne une valeur qui s'incrémente toutes les millisecondes de façon continue depuis que ta carte est sous tension.
Comme elle utilise un compteur interne sur 32 bits, il faudra attendre environ 50 jours pour que le compteur déborde, et que sa valeur reprenne à 0.
On commence par enregistrer la valeur retournée par millis() dans une variable adaptée (unsigned long).
Cette valeur correspond à l'instant présent comme si tu regardes l'heure sur ta montre.
Si tu veux faire une action dans 1 seconde à partir de ce moment présent, tu devras juste regarder ta montre de temps en temps, donc la nouvelle valeur retournée par millis() pour la comparer à celle que tu as mémorisée précédemment.
if((millis() - temps) > 1000)
{
etat_led = !etat_led; // on inverse l'état de la LED
digitalWrite(led, etat_led); // on allume ou éteint
temps = millis(); // on stocke la nouvelle heure
}
Tant que tu vois que la seconde n'est pas passée, tu laisses tomber et tu continue en boucle les fonctions dans ta loop.
Si tu dépasses enfin la seconde, tu exécutes l'action en attente.
Il est important de bien respecter la tournure de la comparaison avec millis().
millis() - valeur mémorisée > temps d'attente
Cette façon de procéder évite un comportement non désiré qui se produit lorsque la valeur retournée par millis() transite entre ses valeurs maximales et ses valeurs minimales après débordement.
Il ne faut pas non plus attendre un égalité parfaite == lors de la comparaison, car rien ne t'assures que tus ne vas pas arriver légèrement en retard lors du test.
Dans ta loop, tu peux avoir évidemment plusieurs fonctions qui testent millis() pour attendre des instants différents.
Dans l'exemple ci-dessus, la valeur mémorisée est rechargée, après l'attente, avec la nouvelle heure pour une nouvelle attente.
Si tu veux pouvoir désactiver ta fonction d'attente car tu n'en a plus besoin, il suffit simplement d'ajouter dans la condition une variable booléenne qui te servira de commande.
Pendant ces temps d'attentes, ta loop reste donc disponible pour scruter tes capteurs, un clavier ou toute autre événement.
Si attente activée et que millis() - valeur mémorisée > temps d'attente
@biggil pas de problème, un débat est toujours intéressant et apporte forcément des réponses aux lecteurs ou au moins une façon d'envisager plusieurs solutions.
Je propose juste une solution pédagogique sur le sujet récurrent qu'est millis(), et donne à certaines personnes l'occasion de comprendre ce principe.
Mais je suis persuadé que ton code séduira sûrement d'autres programmeurs plus avancés 
On est des programmeurs compulsifs et c'est notre drogue, toujours besoin de concrétiser nos pensées :D.