#define echoPin A0
#define trigPin A1
#define greenLED A4 // Broche pour la LED verte
#define orangeLED A3 // Broche pour la LED orange
#define redLED A2 // Broche pour la LED rouge
#define switchPin D1 // Broche pour l'interrupteur
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(greenLED, OUTPUT);
pinMode(orangeLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(switchPin, INPUT_PULLUP);
digitalWrite(STCP, LOW);
shiftOut(DS, SHCP, MSBFIRST, segments[meters / 10]);
shiftOut(DS, SHCP, MSBFIRST, segments[meters % 10] | B00000001); // Activer le point décimal sur le premier digit
digitalWrite(STCP, HIGH);
digitalWrite(STCP, LOW);
shiftOut(DS, SHCP, MSBFIRST, segments[decimal]);
digitalWrite(STCP, HIGH);
}
void displayDistanceOnTerminal(float distance) {
Serial.print("Distance: ");
Serial.print(distance, 1); // Afficher un seul chiffre après la virgule
Serial.println(" m");
}
void loop() {
int switchState = digitalRead(switchPin);
if (switchState == LOW) {
digitalWrite(greenLED, LOW);
digitalWrite(orangeLED, LOW);
digitalWrite(redLED, LOW);
displayDistance(0);
displayDistanceOnTerminal(0); // Affichage sur le terminal
} else {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58.2;
displayDistanceOnTerminal(distance); // Affichage sur le terminal
digitalWrite(greenLED, LOW);
digitalWrite(orangeLED, LOW);
digitalWrite(redLED, LOW);
if (distance > 120) {
digitalWrite(greenLED, HIGH);
} else if (distance >= 30 && distance <= 120) {
digitalWrite(orangeLED, HIGH);
} else {
digitalWrite(redLED, HIGH);
}
displayDistance(distance);
}
delay(100);
}