Faire une "pause" avec milis() et sans delay!!

Salut,
Alors voila c'est pour mon projet de bac, ma tache était d'afficher la vitesse du vent, la direction du vent, puis en déduire l'allure du bateau par rapport à la direction du vent . Tout ça fonctionne bien, le soucis c'est que j'ai voulus mesurer la tension sur la broche analogique0 qui détermine la direction du vent il y a 16
différentes tensions possible avec la girouette. Donc je mesure une fois la tension au début, et une fois a la fin du programme si la première est égal à la deuxième alors cela veut dire que la girouette n'a pas bougé.
A ce moment la je veut donc mettre la girouette sous 0v puis attendre 5 secondes et remettre la girouette sous 5V pour qu'elle puisse repartir mesurer la broche A0. Voilà le problème que je n'arrive a résoudre c'est attendre 5 seconde avant de remettre la girouette sous 5v. Avant j'avais mis un delay mais le problème c'est que ça freeze mon programme. Tout fonctionne, sauf les deux if qu'il y à la fin du programme.
float Ugirouette= A0 ;
unsigned long time;
int EcoGirouette=7;
int secteur;
float Ugirouette2=A0;
char* myStrings[]={
"Direction Vent = N Allure voilier = Vent face",
"Direction Vent = NNE Allure voilier = Vent faceb babord",
"Direction Vent = NE Allure voilier = Vent pres babord",
"Direction Vent = ENE Allure voilier = Vent petit largue babord",
"Direction Vent = E Allure voilier = Vent travers babord",
"Direction Vent = ESE Allure voilier = Vent largue babord",
"Direction Vent = SE Allure voilier = Vent grand largue babord",
"Direction Vent = SSE Allure voilier = Vent grand grand largue babord",
"Direction Vent = S Allure voilier = Vent arriere",
"Direction Vent = SSO Allure voilier = Vent grand grand largue tribord",
"Direction Vent = SO Allure voilier = Vent grand largue tribord",
"Direction Vent = OSO Allure voilier = Vent largue tribord",
"Direction Vent = O Allure voilier = Vent travers tribord",
"Direction Vent = ONO Allure voilier = Vent petit largue tribord",
"Direction Vent = NO Allure voilier = Vent pres tribord",
"Direction Vent = NNO Allure voilier = Vent face tribord",};
void setup() {
pinMode(EcoGirouette, OUTPUT ); //mettre la broche numérique en sortie
(digitalWrite(EcoGirouette,HIGH));
Serial.begin(9600) ;

}
void loop() {
time = millis();
Ugirouette= analogRead(A0); //lit la tension sur la broche analogique 0 et met la valeur dans la variable Ugirouette
Ugirouette = Ugirouette*(5.0/1023.0); // Ré-étalonne la valeur entre 0 et 1023 sur une fourchette entre 0v et 5v
if(3.635<Ugirouette && Ugirouette<=3.94 ){
secteur = 0; //N Vent face
}
else if (1.8<=Ugirouette && Ugirouette<=2.05 ){
secteur = 1; //NNE Vent face babord
}
else if (2.115<Ugirouette && Ugirouette<=2.59){
secteur = 2; //NE Vent près babord
}
else if (0.365<Ugirouette && Ugirouette<=0.43 ){
secteur = 3; //ENE Vent petit largue babord
}
else if (0.43<Ugirouette && Ugirouette<=0.535 ){
secteur = 4; //E Vent travers babord
}
else if (0.01<Ugirouette && Ugirouette<=0.365 ){
secteur = 5; //ESE Vent largue babord
}
else if (0.76<Ugirouette && Ugirouette<=1.045){
secteur = 6; //SE Vent grand largue babord
}
else if (0.535<Ugirouette && Ugirouette<=0.76){
secteur = 7; //SSE Vent grand grand largue babord
}
else if (1.350<Ugirouette && Ugirouette<=1.520 )
{secteur = 8; //S Vent arrière
}
else if (1.045<Ugirouette && Ugirouette<=1.295 )
{secteur = 9; //SSO Vent grand grand tribord
}
else if (3.03<Ugirouette && Ugirouette<=3.255 )
{secteur =10; //SO Vent grand largue tribord
}
else if (2.59<Ugirouette && Ugirouette<=3.03 )
{secteur =11; //OSO Vent largue tribord
}
else if (4.60<Ugirouette && Ugirouette<=4.7)
{secteur =12; //O Vent travers tribord
}
else if (3.94<Ugirouette && Ugirouette<=4.33)
{secteur =13; //ONO Vent petit largue tribord
}
else if (4.20<Ugirouette && Ugirouette<4.45)
{secteur =14; //NO Vent pres tribord
}
else if (3.255<Ugirouette && Ugirouette<=3.635 )
{secteur =15; //NNO Vent face tribord
}
Serial.println(myStrings[secteur]);
Ugirouette2= analogRead(A0);
Ugirouette2= Ugirouette2*(5.0/1023.0);
if ( Ugirouette== Ugirouette2){
(digitalWrite(EcoGirouette,LOW));
time=0;
}
time = millis();
if(time >=5000) {
(digitalWrite(EcoGirouette,HIGH));
}
}

Merci de respecter les règles du forum pour poster du code. Éditez votre code ci dessus pour mettre le code entre les balises de code. (Lisez bien éditer son post pour les nuls qui est épinglé tout en haut de ce forum. On compte sur vous.

Il faut restructurer le programme en utilisant la technique de "blink without delay"

Lisez l'exemple (en anglais) ou allez jeter un œil à l'article d'eskimon sur introduire le temps (la partie sur millis() à la fin

(Pas d'autre aide de ma part tant que le post ci dessus n'est pas présenté correctement)