Salut,
Ton code (pas fonctionnel) :
//Programme de l'anémomètre
#include <math.h>
#include <LiquidCrystal.h>
byte compteur = 0;
int anemometre = 9;
volatile boolean valeur = false;
LiquidCrystal lcd(8, 7, 6, 5, 4, 3);
void setup()
{
pinMode (9, INPUT);
attachInterrupt(0, btn, FALLING);
lcd.begin(20, 4);
lcd.setCursor(4, 1);
lcd.print("Anemometre");
delay(1000); // pause rapide pour laisser temps initialisation
lcd.clear();
// put your setup code here, to run once:
}
void loop()
{
digitalWrite(9, valeur);
lcd.setCursor(0, 0);
lcd.print(compteur);
}
void btn()
{
valeur=!valeur;
}
Le principe pour compter des impulsions, est de connecter un capteur sur une entrée avec interruption et à chaque interruption, augmenter la valeur du compteur.
Note : Il est préférable de commuter le GND plutot que le 5V. c'est plus facile à mettre en oeuvre car pas besoin de "résistance de tirage".
Les interruptions sur le UNO sont sur les PIN 2 (INT0) et PIN 3 (INT1).
Dans ton code, tu peux déjà mettre la PIN2 en entrée et en mode PULLUP (niveau haut), et rattacher une interruption front descendant dessus (HIGH to LOW = FALLING) :
void setup()
{
pinMode (2, INPUT_PULLUP);
attachInterrupt(0, btn, FALLING);
...
...
}
le code interruption attaché étant la fonction "btn"; tu y fais un ++ sur le compteur à incrémenter :
void btn()
{
compteur++;
}
Avec ces deux modifications, tu es capable de compter les impulsions de ton anémomètre (nb de tours réalisé), avec une impulsion comptée à chaque mise à GND de la PIN 2.
Ensuite dans ta LOOP, il faut mettre une mesure d'écart de temps et "juste" des formules de maths pour calculer la vitesse sur ce laps de temps donné (ex: nb tours/min) et en déduire la vitesse du vent suivant une abaque / info de ton modèle d'anémomètre.
Tu as aussi un exemple de comptage sur un ventilo ici : Arduino Playground - ReadingRPM
En espérant t'avoir aiguillé.
A+