faire une routine ou fonction pour temporisation du grafcet

je veux faire un temporisation pour mon grafcet sous forme de fonction void je l'appel quand je veux,mais le problème j'ai essayer beaucoup de trucs avec fonction millis() mais sa ne marche pas .
donc je serai très content si vous m'aider a faire une tempo qui fonctionne par exemple a l’étape une du grafcet et qui compte 10 seconds. après elle passera automatiquement a l’étape 2

[void tim(){
  fin=millis();
  if(step1==HIGH)fin=debut;
  if (fin-debut<5000)T1=HIGH;
  else T1=LOW;}
 /code]

grafcet_lineaire_modbus.ino (3.28 KB)

hello

je n'ai pas regardé si le code est ok ou pas.

mais j'ai remarqué que tu n'appelles tempo() que lorsque step=1.

donc dans tempo :
"debut" est initialisé à milli() à chaque appel. disons debut =1000
"actuel" est initialisé à chaque appel. disons actuel =1000

que fait le if qui suit ?
if(actuel==debut+5000)T1=HIGH; si "actuel"est égal à ("debut" +5000)

void tempo(){
  if(step1==HIGH){debut=millis;
 
  actuel=millis();
  if(actuel==debut+5000)T1=HIGH;
  else T1=LOW;}}

tu declares ce bool en tete du prg
bool premier_passage = true;

tu appelles la fonction tempo
tempo();

la fonction est la suivante

void tempo()
{
  if ((step1 == HIGH) && premier_passage)
  {
    debut = millis; premier_passage = false;
  }
  actuel = millis();
  if ((actuel - debut) >= 5000)
  {
    T1 = HIGH; premier_passage = true;
  }
  else
  {
    T1 = LOW;
  }
}

Merci beaucoup j 'ai trouver enfin une solution avec une fonction bool tempo(étape, lle nom de la tempo,la durée, )je l'appel quand je veux ça marche très bien mais je vais essayer aussi la votre je vous remercie

Créez un état attente dans votre grafcet et lors de la transition dans cet état vous mémorisez l’heure de départ (millis) et cet état ne fait que comparer le millis en cours avec celui mémorisé. Une fois votre temps écoulé, vous passez à un nouvel état du grafcet qui aura pu être défini dans une variable particulière avant d’entrer dans l’état attente, ce qui permet de réutiliser cet état un peu partout

Cette approche permet de rester cohérent avec une machine à états et ne bloque pas la loop

Merci j m l