Ca ne peut pas être ça puisque le delay est précédé parce la condition de testouverture(). Donc les 5000 ms peuvent se passer relais ouvert ou relais fermé.
A mon avis c'est plus un problème de latence : un digitalWrite() prend quelques microseconds, puis tu tests un paramètre après le relais ce qui prend la aussi un temps de l'ordre de la µs. Probleme : même si ton relais commute en 10 ou 20µs (ce qui est très rapide pour un relais !) testouverture() sera passé depuis longtemps. De toute façon ton code n'est pas rigoureux il vaut mieux :
if (NIVAVAR_REF_0 <= NIVAVAR_AV_M && digitalRead (CVOAVG)== LOW) { // si la condition est OK
digitalWrite(AVGRO, LOW); // j'alimente le relais
delay (5000);
} else {
digitalWrite(AVGRO, HIGH); // je coupe le relais
}
}
Après tu veux peut-être que ton relais se coupe quand ton verrin arrive en butée :
long Depart;
...
if (NIVAVAR_REF_0 <= NIVAVAR_AV_M && digitalRead (CVOAVG)== LOW ) { // si la condition est OK
digitalWrite(AVGRO, LOW); // j'alimente le relais
Depart=millis();
}
if(millis()-Depart>5000 || digitalRead (CVOAVG)== HIGH) {
digitalWrite(AVGRO, HIGH); // je coupe le relais
}
}