Vitesse et capteur Hall

Avec ce calcul les vitesses affiché par rapport au temps sont très précises en revanche le calcul de la période souffre de bug (freeze ou temps incorrect).

Je ne comprend pas trop ce que vous voulez dire par "mesurer la période en interruption", je les utilises déjà non ? Il y a t il une autre méthode ou fonction ?

float vitesse = 0; // Vitesse de la roue (du véhicule)
unsigned long chrono = 0; // Valeur courante du chrono
unsigned long chrono_depart = 0; // Valeur de départ du chrono
int capteur = 2; //Pin d'entrée du capteur hall
unsigned int compteur = 0; //Valeur de compteur (compte chaque passage de l'aimant devan le capteur hall)
boolean x = false;
float tps;

void compteurInc()
{
  compteur++; //Incrémentation du compteur
}

void setup()
{
  Serial.begin(9600);

  chrono_depart = micros();

  //La fonction compteurInc sera appelée sur chaque front descendant (FALLING) de "capteur" (pin 2=interuption 0)
  attachInterrupt(0, compteurInc, FALLING);
  digitalWrite(capteur, HIGH);
}

void loop()
{
  x = false;
  
  while (x == false){

    if (compteur == 1) {
      chrono = micros();
    }
     
    if (compteur == 2) {
      detachInterrupt(digitalPinToInterrupt(capteur));
      vitesse = (3600000.0/(chrono - chrono_depart))*1.88;
      Serial.print("Temps (microsec) : ");
      Serial.println(chrono - chrono_depart);
      Serial.print(vitesse);
      Serial.println(" km/h");
      x = true;
      attachInterrupt(0, compteurInc, FALLING);
    }
  
  }

   chrono_depart = micros(); // Mise à zéro du chrono de départ
   compteur=0; // Mise à zéro du compteur
   
}