Faire une tempo sans bloquer le programme (millis ) : HELP !

Bonsoir, je débute dans la programmation, je suis en train de réaliser un montage permettant de commander un moteur de volet roulant (Pin 12 : monté et Pin13 : descente ) à partir de deux points distants:

Bouton 2 et 3 (monté/descente ) à un endroit et Bouton 4 et 5 (monté/descente ) à un autre. Le but est que seul la dernière action sur un bouton est pris en compte, je surveille donc le front montant (appui) sur un bouton.

J'ai enfin quelque chose qui marche ( 3 semaines de recherches quand même), je vous livre le code

int bouton2 = 2; //le bouton DESCENTE 1 est connecté à la broche 2 de la carte 
int bouton3 = 3; //le bouton MONTE 1 est connecté à la broche 3 de la carte 
int bouton4 = 4; //le bouton MONTE 1 est connecté à la broche 4 de la carte 
int bouton5 = 5; //le bouton DESCENTE 2 est connecté à la broche 5 de la carte 
int memoire_bout2 = HIGH;
int memoire_bout3 = HIGH;
int memoire_bout4 = HIGH;
int memoire_bout5 = HIGH;
int pin13 = 13 ; // Commande descente volet
int pin12 = 12 ; // Commande monté volet
  
int etatBouton2; //variable qui enregistre l'état du bouton 2
int etatBouton3; //variable qui enregistre l'état du bouton 3
int etatBouton4; //variable qui enregistre l'état du bouton 4
int etatBouton5; //variable qui enregistre l'état du bouton 5
 
void setup()
{
   pinMode(bouton2, INPUT); //le bouton 2 est une entrée
   pinMode(bouton3, INPUT); //le bouton 3 est une entrée
   pinMode(bouton4, INPUT); //le bouton 4 est une entrée
   pinMode(bouton5, INPUT); //le bouton 5 est une entrée
   pinMode(pin12,OUTPUT); //pin12 est une sortie
   pinMode(pin13,OUTPUT); // pin13 est une sortie
   etatBouton2 = HIGH; //on initialise l'état du bouton 2 comme "relaché"
   etatBouton3 = HIGH; //on initialise l'état du bouton 3 comme "relaché"
   etatBouton4 = HIGH; //on initialise l'état du bouton 4 comme "relaché"
   etatBouton5 = HIGH; //on initialise l'état du bouton 5 comme "relaché"
   }
   
void loop()
{
    etatBouton2 = digitalRead(bouton2); //Rappel : bouton = 2     
   if((etatBouton2 != memoire_bout2) && (etatBouton2 == HIGH))
   {
      digitalWrite(pin12,LOW);
      digitalWrite(pin13,HIGH);
    
   }
    memoire_bout2 = etatBouton2;

    etatBouton3 = digitalRead(bouton3); //Rappel : bouton = 3
    
   if((etatBouton3 != memoire_bout3) && (etatBouton3 == HIGH))
   {
      digitalWrite(pin13,LOW);
      digitalWrite(pin12,HIGH);
    
   }
    
     memoire_bout3 = etatBouton3;

     etatBouton4 = digitalRead(bouton4); //Rappel : bouton = 4
    
   if((etatBouton4 != memoire_bout4) && (etatBouton4 == HIGH))
   {
       digitalWrite(pin13,LOW);
      digitalWrite(pin12,HIGH);
   
   }
    
     memoire_bout4 = etatBouton4; 

     etatBouton5 = digitalRead(bouton5); //Rappel : bouton = 5
    
   if((etatBouton5 != memoire_bout5) && (etatBouton5 == HIGH))
   {
      digitalWrite(pin12,LOW);
      digitalWrite(pin13,HIGH);
   
   }
    
     memoire_bout5 = etatBouton5; 
     
}

C'est surement l'usine à gaz mais c'est fonctionnel !

Actuellement quand une sortie passe à l’état haut elle le reste jusqu’à une action sur un autre bouton, j'aimerais temporisé la sortie, c'est à dire "digitalWrite(pin13,HIGH)" pendant 10 secondes par exemple puis "digitalWrite(pin13,LOW)" mais sans bloquer le programme.

J'ai tenté de comprendre "millis" mais là çà dépasse mes compétences ...

Existe t-il une solution simple ?

Merci,

Christophe,

Mécano, apprenti arduino

a quoi ça sert que Bricoleau se décarcasse ici

Pour "comprendre millis" as-tu déjà regardé ce tuto ou encore celui-là ?

C'est assez simple une fois qu'on a compris le principe : on stocke en quelque sorte la date en millisecondes et on regarde s'il s'est écoulé assez de temps pour faire l'action (temporisée) qu'il faudrait réaliser...