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
}
}