Interruption impossible

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 :slight_smile:
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);
}

Bonjour,

Ta variable clearlcd doit être globale (et volatile).
Elle est redéfinie dans lcdclear() (c'est donc une variable locale dans cette fonction).

Super merci à toi !

Salut ,

apres une facon plus " simple " serait de faire un appel a la fonction clearlcd ()

en direct ou il y en a besoin et la transformer de la sorte :
void lcdclear()
{
lcd.setCursor(11,0);
lcd.print(" ");
vmax = 0;
Serial.println("CLEARLCD");
}

pui dans la loop , juste mettre lcdclear () ; avant chaque nouvelle mesure .