#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);
}
74HC595
74HC595