Bonjour à tous,
J'ai pour projet de mesurer la vitesse d'un moteur et de l'afficher sur un écran oled.
Je ne veux aucune interaction en fonction de la vitesse, c'est juste un indicateur visuel.
Le programme fonctionne bien mais je reste dans la boucle "while" et du coup je ne peux pas avoir les infos de mes autres capteur, comme si le programme était en pause pendant 1 seconde et reprend.
Le capteur "fourche" Capteur optique
Je m'explique, lorsque je presse un bouton, si il n'est pas pressé en sortie de boucle "While" il n'en tient pas compte.
J'ai essayé la bibliothéque "freqcounter" et "timerOne" sans succés
Y a t-il une solution pour avoir la vitesse en temps réel et en même temps avec les infos de mes capteurs ?
Merci d'avance
int sensor = 4; // broche pour détection du capteur
int etatSensor ; // état du capteur (haut ou bas)
unsigned long start_time=0; //temps de début d'un comptage
unsigned long end_time =0; //temps de fin d'un comptage
int bouton = 2;
int clique;
int nb_trous =1 ; // nombre de trous de la roue codeuse
int etat_old= 1 ; //
int etat_new = 1; // les états vont changer à chaque chaque modiication de la valeu lue par le capteur (haut/5V ou bas/0V)
int compt=0; // comptage initialisé à 0
float rps=0; // vitesse intialisée à 0
float rpm=0;//rotation par minute
void setup()
{
pinMode(sensor,INPUT_PULLUP); // la broche 3 est déclarée comme entrée
pinMode(bouton,INPUT_PULLUP);
Serial.begin(9600); // pour le moniteur série
}
void loop()
{
compt = 0;
start_time=millis(); //on mesure le temps
end_time=start_time+1000; // pour un comptage toutes les secondes
clique = digitalRead(bouton);
while(millis()<end_time)
{ // comptage sur une seconde
etat_new = digitalRead(sensor);
if (etat_old != etat_new)
{ // petite boucle pour incrémenter le compteur à chaque changement d'état lu par le capteur
etat_old = etat_new;
compt = compt+1;
}
}
rps = float(compt)/(2*nb_trous) ; // il faut diviser par 2 car pour chaque trou , deux changements d'état vont être détectés
rpm = (rps)*60;
Serial.print(" rotation par seconde ");
Serial.println(rps);
Serial.print(" rotation par minute ");
Serial.println(rpm);
if(clique==LOW)
{
Serial.println("click bouton");
}
}