Après réflexion j'ai fait un code qui compte le nombre de micro secondes en 1 tour, ça fonctionne bien... Maintenant le problème est de convertir le temps en fonction de la distance que parcourt la roue en 1 tour (1,8m environ, celle ci fait 556 tours pour faire 1km...) et là ça fait mal au cerveau de réfléchir à une conversion entre 2 unités différente haha :p, je n'arrive pas à trouver ce foutu calcul qui pourtant ne doit pas être bien compliqué ! Avez vous une idée ?
//float vitesse = 0; // Vitesse de la roue (du véhicule)
//float rpm = 0; // Trs/min de la roue
unsigned int chrono = 0; // Valeur courante du chrono
unsigned int chrono_depart = 0; // Valeur de départ du chrono
//unsigned int duree_test = 3000; // Durée du test de "vitesse" en ms (ex : 3 sec = 3000ms)
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)
//float diametreR = 0.6; // Diametre de la roue /10 (ex: diamètre = 60cm /10 = 0.6)
boolean x = false;
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(capteur);
Serial.println(chrono - chrono_depart);
x = true;
attachInterrupt(0, compteurInc, FALLING);
}
}
chrono_depart = micros(); // Mise à zéro du chrono de départ
compteur=0; // Mise à zéro du compteur
}