Bonjour merci d'avoir répondu donc j'ai fais comme vous m'avez dis je ne sais pas si c'est ok
float nbmesure = 0; // nombre de mesure
float moy = 0; // moyenne variable
unsigned int capteur = 2; // Capteur effet hall
unsigned long chrono; // Valeur courante du chrono
unsigned long chrono_depart = 0; // Valeur de depart du chrono
unsigned long chrono_2; // Valeur courante du chrono 2
unsigned long chrono_depart_2 = 0; // Valeur de depart de chrono 2
unsigned long periode; // La periode calcule pour un tour de roue
unsigned int duree_inactivite = 5000; // Duree d'inactivite de la vitesse si le kart n'avance pas pendant 5 seconde
float vitesse_moyenne = 0; // Variable de la vitesse moyenne
float vitesse = 0; // Variable de vitesse
float periR = 1.7; // Périmetre de la roue en m d*pi/100
bool flagMesure = false; // Concerne la mesure de la vitesse
void compteurInc()
{
chrono = micros();
periode = chrono - chrono_depart;
chrono_depart = chrono;
flagMesure = true; // On a une mesure de periode valide
}
void setup()
{
Serial.begin(9600); // Initialisation du moniteur
chrono_depart_2 = millis();
// La fonction compteurInc est appelée sur chaque front descendant (FALLING) du "capteur" (PIN 2 = interuption 0)
attachInterrupt(0, compteurInc, FALLING);
digitalWrite(capteur, HIGH);
}
void loop()
{
chrono_2 = millis();
if (flagMesure == false && (chrono_2 - chrono_depart_2 > duree_inactivite)){
vitesse = 0;
Serial.print(vitesse,0);
Serial.println(" km/h");
moy=moy+vitesse;
nbmesure=nbmesure+1;
if (nbmesure>0);
moy=moy/nbmesure;
Serial.println("moy");
moy=0;
nbmesure = 0;
Serial.println("km/h");
delay(500);
}
else if (flagMesure)
{
noInterrupts();
unsigned long t = periode;
flagMesure = false;
interrupts();
vitesse=periR/1000/(t/1e6/3600); // On calcule la vitesse en fonction de la période et de la distance que parcourt la roue en 1 tour (périmètre).
Serial.print(vitesse,1);
Serial.println(" km/h");
chrono_depart_2 = millis(); // On remet à zéro le chronomètre de départ 2 (compteur d'inactivité)
}
}