demande d'aide meci

Bonjour j’ai besoin d’aide je ne comprends pas pourquoi j’ai un message d'ereure quand je vérifie ce programme si quelqu’un a la gentillesse de bien vouloir m’aider je serais heureux merci d’avance je fais un capteur de vitesse

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define trig3 8
#define echo3 9
#define trig2 6
#define echo2 7
#define trig1 5
#define echo1 4
int TempsInit1 = 0;
int TempsReel1 = 0;
int TempsSec1 = 0;
int TempsMil1 = 0;
int TempsInit2 = 0;
int TempsReel2 = 0;
int TempsSec2 = 0;
int TempsMil2 = 0;
int a = 0;
float b, c, d, e;
float v, t, km, ti, tf;
boolean  Stop1erCapteur = false;
boolean  AutoMaintien = false;
LiquidCrystal_I2C lcd(0x27, 20, 4); // initialisation de l'afficheur LCD

void setup() {
  Serial.begin(115200);
  pinMode(trig3, OUTPUT);  // initialisation des capteurs ultrasonics
  pinMode(echo3, INPUT);
  pinMode(trig2, OUTPUT);
  pinMode(echo2, INPUT);
  pinMode(trig1, OUTPUT);
  pinMode(echo1, INPUT);
  {
    lcd.init();
  }
}
void loop() {
  // condition pour réaliser une seul fois la fonction dans la boucle
  boolean fin1 = false;
  boolean fin2 = false;
  boolean fin3 = false;
  boolean fin = false;
  boolean debut = true;


  float duration1, distance1; // calcule une premiere distance pour savoir si lancer ou arreter le chrono
  digitalWrite(trig1, LOW);
  delayMicroseconds(2);

  digitalWrite(trig1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig1, LOW);

  duration1 = pulseIn(echo1, HIGH);
  distance1 = (duration1 / 2) * 0.0344;
  Serial.println(distance1);


  // calcul du premier chrono
  // on effectue le traitement suivant si aucune detection effectuee
  if ( ( distance3 > 20 || distance3 < 2 ) &&  Stop1erCapteur == false) {

    TempsInit1 = (millis()); // compte le temps de centième de seconde depuis le lancement du programme
    TempsReel1 = (millis() - TempsInit1);
    TempsSec1 = (TempsReel1 / 1000) % 60;
    TempsMil1 = (TempsReel1 % 1000) / 10;

    //intialisation du temps-secondes
    int secondes1 = millis() / 1000;
    int TempsMil1 = millis() / 10;
    lcd.backlight();
    /* lcd.setCursor(0, 1);
      lcd.print("chrono:");*/
    lcd.setCursor(0, 0);
    lcd.print(secondes1);
    lcd.setCursor(3, 0);
    lcd.print("sec");
    lcd.setCursor(6, 0);
    lcd.print(TempsMil1);
    ti = TempsMil1;
    if (distance3 < 20 && distance3 > 2) { // arrete le chrono si detection d'un objet
      lcd.clear();
    }
  }

  if ((distance3 < 20 &&  distance3 > 3) ||  AutoMaintien == true ) {
    Stop1erCapteur = true;
    AutoMaintien = true;

    float duration2, distance2; // calcule une seconde distance pour savoir quand arreter le second chrono
    digitalWrite(trig2, LOW);
    delayMicroseconds(2);

    digitalWrite(trig2, HIGH);
    delayMicroseconds(10);
    digitalWrite(trig2, LOW);

    duration2 = pulseIn(echo2, HIGH);
    distance2 = (duration2 / 2) * 0.0344;
    Serial.println(distance2);


    TempsInit2 = (millis());  // continu sur un 2ème chrono de compter depuis combien de temps le programme est lancé
    TempsReel2 = (millis() - TempsInit2);
    TempsSec2 = (TempsReel2 / 1000) % 60;
    TempsMil2 = (TempsReel2 % 1000) / 10;

    //intialisation du temps-secondes
    int secondes2 = millis() / 1000;
    int TempsMil2 = millis() / 10;
    lcd.backlight();
    lcd.setCursor(0, 1);
    lcd.print(secondes2);
    lcd.setCursor(3, 1);
    lcd.print("sec");
    lcd.setCursor(6, 1);
    lcd.print(TempsMil2);
    Serial.print(TempsMil2);
    t = TempsMil2;

    if (distance2 < 20 && distance2 > 3) { // arrete le second cchrono si détection objet
      lcd.backlight();
      lcd.setCursor(12, 1);
      lcd.print("f");
      delay(3000);
      lcd.clear();
      fin = true;
    }
  }
  if (fin) {  // calcule une 3ème distance pour déterminer la distance entre les 2 capteurs derniers
    float duration3, distance3;
    digitalWrite(trig3, LOW);
    delayMicroseconds(2);

    digitalWrite(trig3, HIGH);
    delayMicroseconds(10);
    digitalWrite(trig3, LOW);

    duration3 = pulseIn(echo3, HIGH);
    distance3 = (duration3 / 2) * 0.0344;
    b = distance3;
    fin1 = true;
    /* if (distance >= 400 || distance <= 2) {
       lcd.print("Out of range");
       delay(500);
      }
      else {
       lcd.backlight();// Envoi du message
       lcd.setCursor(0, 0);
       lcd.print(distance);
       lcd.print(" cm");
       delay(500);
      }
      delay(500);
      lcd.clear();*/
  }

  if (fin1) {  // recalcule cette distance
    float duration3, distance3;
    digitalWrite(trig3, LOW);
    delayMicroseconds(2);

    digitalWrite(trig3, HIGH);
    delayMicroseconds(10);
    digitalWrite(trig3, LOW);

    duration3 = pulseIn(echo3, HIGH);
    distance3 = (duration3 / 2) * 0.0344;
    c = distance3;
    fin2 = true;
    /*if (distance >= 400 || distance <= 2) {
      lcd.print("Out of range");
      delay(500);
      }
      else {
      lcd.backlight();// Envoi du message
      lcd.setCursor(0, 0);
      lcd.print(distance);
      lcd.print(" cm");
      delay(500);
      }
      delay(500);
      lcd.clear();*/
  }

  if (fin2) {  // effectue une derniere fois le calcule de la distance
    float duration3, distance3;
    digitalWrite(trig3, LOW);
    delayMicroseconds(2);

    digitalWrite(trig3, HIGH);
    delayMicroseconds(10);
    digitalWrite(trig3, LOW);

    duration3 = pulseIn(echo3, HIGH);
    distance3 = (duration3 / 2) * 0.0344;
    d = distance3;
    fin3 = true;
    /* if (distance >= 400 || distance <= 2) {
        lcd.print("Out of range");
        delay(500);
      }
      else {
        lcd.backlight();// Envoi du message
        lcd.setCursor(0, 0);
        lcd.print(distance);
        lcd.print(" cm");
        delay(500);
      }
      delay(500);
      lcd.clear();*/
  }

  if (fin3) {  // effectue tous les calculs en fin
    Serial.println("on est dans fin3");
    float e = b + c + d;
    float dist = e / 3; // calcule une moyenne des 3 distance effecteur pour estimer le mieux possible la distance entre les 2 1er capteurs
    float tf = (t - ti) / 100; // calculer le temps entre l'activation du 1er et 2nd capteur
    lcd.backlight();
    lcd.setCursor(0, 0);
    lcd.print(dist);
    lcd.print(" cm");
    delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(tf);
    lcd.print(" sec");
    delay(5000);
    lcd.clear();
    float v = (dist / 100) / tf; // calcule la vitesse en mètre par seconde grace à la distance et au temps
    float km = v * 3.6;  // en déduis la vitesse en km par heure
    lcd.print(v);
    lcd.print(" m/s");
    lcd.setCursor(0, 1);
    lcd.print(km);
    lcd.print(" km/h"); // écrit tout ca sur l'écran LCD
    exit(0);  //Programme finit
  }
}

Et si vous nous postiez le message d’erreur, vous ne pensez pas que vous auriez plus de chance d’avoir une réponse ?

(J’ai remarqué que dans la loop vous utilisez distance3 sans l’avoir calculée et vous devriez lire un article sur la portée des variables en C/C++)

ketch_jun21a.ino:60:10: error: 'distance3' was not declared in this scope
sketch_jun21a.ino:85:8: error: 'distance3' was not declared in this scope
Erreur lors de la compilation

A toi d'en tirer les conclusions

Il est probable que les deux premiers tests utilisant la variable distance3 soient erronés. Ils devraient utiliser distance1 à la place