tempo multiples sans utiliser delay

Bonjour les copains,
Le sujet a déjà été abordé, mais je n'arrive pas à retrouver le lien.
Je peux te proposer trois programmes qui ici m'ont servi comprendre les divers moyens de gérer le temps avec le langage C d'Arduino. Ils ont l'avantage de fonctionner. Tu pourras les télécharger, voir ce qu’il font, puis, décortiquer les instructions pour adapter à tes besoins.
Programme 1

/* Programme pour la gestion du temps sur Arduino sans utiliser dealay(). */

#define LED 13
#define TEMOIN_de_boucle 8
#define DELAI 1000
#define TEMPO_courte 100

// Variables globales.
boolean Etat_LED = false, Bascule_de_boucle = false;
long Ancienne_Horloge = 0 , Ancien_temoin = 0;
unsigned long Horloge_actuelle;

void setup() {pinMode(LED, OUTPUT); pinMode(TEMOIN_de_boucle, OUTPUT); }

void loop() {
  Horloge_actuelle = millis();

  if(Horloge_actuelle - Ancien_temoin > TEMPO_courte)
    {Bascule_de_boucle = 1 - Bascule_de_boucle; Ancien_temoin = Horloge_actuelle;}
  digitalWrite(TEMOIN_de_boucle, Bascule_de_boucle);  
  
  if(Horloge_actuelle - Ancienne_Horloge > DELAI)
    {Etat_LED = 1 - Etat_LED; Ancienne_Horloge = Horloge_actuelle;}
  digitalWrite(LED, Etat_LED); }

Programme 2

/* Programme pour tester la génération du temps sur Arduino.
   ATTENTION : Toute réactivation de la ligne série USB provoque un redémarrage, donc
   la perte de la valeur du Timer 0 qui est remis à zéro. */

// Variables globales.
unsigned long HORLOGE_SYSTEME;

void setup(){ Serial.begin(115200); }
void loop(){
  Serial.print("Temps "); Serial.print(char(233));
  Serial.print("coul"); Serial.print(char(233)); Serial.print(" : ");
  HORLOGE_SYSTEME = millis();
  // Affiche sur la ligne série USB le temps écoulé depuis le redémarrage du programme.
  Serial.println(HORLOGE_SYSTEME/1000); delay(1000); // Un affichage par seconde.
}
   
//  INFINI: goto INFINI; }

Programme 3

#define TEMPO 600 // Dix minutes = 600 secondes.
// Variables globales.
unsigned long DUREE_ECOULEE, TOP_CHRONO;

void setup(){ Serial.begin(115200); TOP_CHRONO = millis()/1000;}

void loop(){
  Traiter_toutes_les_dix_minutes(); }
   
void Traiter_toutes_les_dix_minutes() {
 DUREE_ECOULEE = (millis()/1000) - TOP_CHRONO;
 if (DUREE_ECOULEE == TEMPO)
    { Serial.print("Heure systeme = "); Serial.println(millis()/1000);
      TOP_CHRONO = millis()/1000;} }

Je n’ai pas le temps actuellement de créer du code pour ton problème spécifique, mais ce qui précède devrait t’aider.
Amicalement : Nulentout.