Probleme de code pour calcul de vitesse ( effet hall )

Bonjour,

Je ne m’y connais pas encore très bien en codage, mais j’ai réussi a faire un petit code mais il ne marche pas. L’afficheur montre toujours “0 km/h” quand je fait tourner mon disque (avec l’aimant).
Pourriez vous m’aider ?

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

float start, finished;
float periode, time;
float circonference=0,314; 
float vitessek;     
int hallsensor = 1;

void setup()
{ pinMode(hallsensor, INPUT);
  attachInterrupt(0, vitesseCalc, RISING);
  start=millis();
   lcd.begin(16, 2);
  Serial.begin(9600);
  lcd.setCursor(1, 0);
  lcd.print("Initialisation");
  lcd.setCursor(4, 1);
  lcd.print("en cours");
  delay(1000);
  lcd.clear();
  
}
 
void vitesseCalc()
{
  start=millis();
  speedk=(3600*circonference)/periode; // km/h
}
 
void loop()
{
  lcd.setCursor(0,0);
  lcd.print(int(vitessek));
  lcd.print(" km/h ");
  delay(1000); 
}

Fonction recherche du forum !
Sujet traité 25378831 fois dont une trés recemment !

J’ai cherché mais je ne trouve pas et celle traité récemment n’est pas avec un capteur a effet hall.

Bonjour,

Ce n'est sans doute pas ce code qui ne fonctionne pas car celui-ci ne compile pas.

ah oui, je vien de changer mais ca ne marche toujours pas

tu devrais pas changer speedk par vitessek ?

Si j'ai changer ça, car a la base mon programme étais en anglais et pour le mettre sur le forum j'ai mis en francais et j'avais oublié de changer un "speedk".

Voila j’ai fais quelque petit changement et celui-ci compile.

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

float start, finished;
float periode, time;
float circon = 0.314; 
float vitessek;     
int hallsensor = 1;

void setup()
{ pinMode(hallsensor, INPUT);
  attachInterrupt(0, vitesseCalc, RISING);
  start=millis();
   lcd.begin(16, 2);
  Serial.begin(9600);
  lcd.setCursor(1, 0);
  lcd.print("Initialisation");
  lcd.setCursor(4, 1);
  lcd.print("en cours");
  delay(1000);
  lcd.clear();
  
}
 
void vitesseCalc()
{
  start=millis();
  vitessek=(3600*circon)/periode; // km/h
}
 
void loop()
{
  lcd.setCursor(0,0);
  lcd.print(int(vitessek));
  lcd.print(" km/h ");
  delay(1000); 
}

D'après toi, que donne la ligne suivante lorsqu'elle est exécutée ?
vitessek=(3600*circon)/periode

Bonjour,

Ce ne sont pas les erreurs qui manquent dans ton programme

  • pour utiliser l'interruption 0, le capteur doit être relié sur l'entrée 2 (utilisée par le lcd)
  • periode n'est jamais calculé.
  • pour calculer la vitesse, il faut le diamètre
  • ...

3Sigma il correspond a la vitesse en km/h, ( 3600 x 2 x 3,14 x 0,05 ) / periode

kamill pour la vitesse j’ai le diamètre ^^, il correspond a (2 x 0,05)

Oui j'avais compris, mais quand tu divises par "periode", d'après toi ça donne quel résultat, sachant que "periode" n'a pas été initialisé ?

Pour la periode, je met " periode = millis() " ?

Tu calcules la periode dans l'interruption

void vitesseCalc()
{
 periode=millis()-start;
 start=millis();
}