Bonjour,
Je suis en train de finir de réaliser un petit projet qui est un radar de vitesse.
Je mesure bien la vitesse, je l'affiche correctement sur mon lcd 16x2.
Le problème c'est que j'aimerais bien remettre a 0 ma vitesse maximale mesurée a chaque nouvelle mesure, pour cela j'utilise une interruption, lorsque je lance une nouvelle mesure, la valeur Vmax se met à 0 et en avant pour mesurer une nouvelle Vmax.
Malheureusement ça ne marche pas, je ne sais pas pourquoi, mon interruption de fonctionne pas.
Je vous mets le code, j'espère que vous trouverez le problème
Merci d'avance.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "FreqPeriod.h"
double lfrq;
long int pp;
double vitesse;
double vmax = 0;
int pinbouton = 2;
bool clearlcd = 0;
bool onoff = 0;
int interrupt = 0;
LiquidCrystal_I2C lcd(0x27,16,2); //l adresse 0x27 est a changé en fonction de votre écran
void setup()
{
pinMode(pinbouton, INPUT);
Serial.begin(9600);
FreqPeriod::begin();
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.print("RADAR Domestique");
delay(2000);
lcd.clear();
attachInterrupt(interrupt, lcdclear, CHANGE);
}
void lcdclear()
{
bool clearlcd = 1;
}
void loop()
{
if(clearlcd == 1)
{
lcd.setCursor(11,0);
lcd.print(" ");
vmax = 0;
Serial.println("CLEARLCD");
}
//Serial.print("OnOff : ");
//Serial.println(onoff);
//Serial.print("Etat bouton : ");
//Serial.println(digitalRead(pinbouton));
while(digitalRead(pinbouton) == 1)
{
clearlcd = 0;
pp = FreqPeriod::getPeriod();
if (pp)
{
Serial.print ("period: ");
Serial.print(pp);
Serial.print(" 1/16us / frequency: ");
lfrq = 16000400.0 /pp;
Serial.print(lfrq);
Serial.print(" Hz ");
vitesse = lfrq/19.49;
Serial.print(vitesse);
Serial.println( " Km/h ");
if(vitesse > vmax && vitesse < 200)
{
vmax = vitesse;
}
}
lcd.setCursor(0,0);
lcd.print(" Vitesse : ");
lcd.print(vitesse);
lcd.setCursor(0,1);
lcd.print(" km/h");
lcd.setCursor(6,1);
lcd.print("Vmax=");
lcd.print(vmax);
}
Serial.println(clearlcd);
}