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));
}
}