Aide sur la lib soft timer

Bonjour, voici le lien : [Lib] SoftTimer - Une lib pour faciliter les taches périodique ou liées au temps

Oui j'aimerais bien mais les essais ne sont pas concluant...

Mon relais est clignotant_portail
Le soucis (car j'ai essayé pas mal de choses) c'est que cela fonctionne avec un bouton poussoir et une utilisation simple de millis()

Mais dans mon cas :
if (digitalRead(horloge_portail) == HIGH) { commande_portail_ON(); }
horloge _portail va rester HIGH durant 8 heures et tant que le contact est HIGH le timer ne se lance pas.

Je souhaite que si horloge portail est HIGH, que commande portail ON soit actif tant que horloge portail est HIGH (jusque la tout va bien) et que clignotant_portail soit HIGH durant 20 secondes uniquement.

J'ai essayé donc avec millis() et en prenant en compte le changement d'état de horloge portail mais clignotant reste tout le temps HIGH...

int horloge_portail = 22;
int horloge_barriere = 24;
int lecteur_int = 26;
int boucle = 28;
int ouverture_portail = 51;
int ouverture_barriere = 53;
int clignotant_portail = 49;
int hp = 0;           
int hpmem = 0;       
int cp = 0;

unsigned long Temps_Actuel;
unsigned long Temps_Precedent;

unsigned long Tempo_Repos = 3000;

void setup() {
pinMode(horloge_portail, INPUT);
pinMode(horloge_barriere, INPUT);
pinMode(lecteur_int, INPUT);
pinMode(boucle, INPUT);
pinMode(ouverture_portail, OUTPUT);
pinMode(ouverture_barriere, OUTPUT);
pinMode(clignotant_portail, OUTPUT);
}

void loop() {
Temps_Actuel = millis();
hp = digitalRead(horloge_portail);
if (hp != hpmem){hpmem = hp;
if (hp == 1) {cp = !cp;}
if (hp == 0) {cp = !cp;}
}
if (cp == 1) {clignotant_portail_ON();}
if (cp == 0) {clignotant_portail_ON();}

  
if (digitalRead(horloge_portail) == HIGH)
{ 
commande_portail_ON();
}
if (digitalRead(horloge_portail) == LOW)
{ 
commande_portail_OFF();
}
if ((digitalRead(horloge_portail) == LOW)&&(digitalRead(lecteur_int) == HIGH))
{ 
commande_portail_ON();
}
if ((digitalRead(horloge_portail) == LOW)&&(digitalRead(boucle) == HIGH))
{ 
commande_portail_ON();
}

if (digitalRead(horloge_barriere) == HIGH)
{ 
commande_barriere_ON();
}
if (digitalRead(horloge_barriere) == LOW)
{ 
commande_barriere_OFF();
}
if ((digitalRead(horloge_barriere) == LOW)&&(digitalRead(lecteur_int) == HIGH))
{ 
commande_barriere_ON();
}
if ((digitalRead(horloge_barriere) == LOW)&&(digitalRead(boucle) == HIGH))
{  
commande_barriere_ON();
}
}

/*------------COMMANDES---------------*/
void commande_portail_ON(){
digitalWrite(ouverture_portail,HIGH);
}
void commande_portail_OFF(){
digitalWrite(ouverture_portail,LOW);
}
void commande_barriere_ON(){
digitalWrite(ouverture_barriere,HIGH); 
}
void commande_barriere_OFF(){
digitalWrite(ouverture_barriere,LOW); 
}
void clignotant_portail_ON(){
Temps_Precedent = Temps_Actuel;
if ((Temps_Actuel -  Temps_Precedent) < Tempo_Repos) {
digitalWrite(clignotant_portail,HIGH);
}
if ((Temps_Actuel -  Temps_Precedent) > Tempo_Repos) {
digitalWrite(clignotant_portail,LOW);
}
}