#include <Ultrasonic.h>
#include <ShiftDisplay.h>
#include<ShiftRegister74HC595.h>
// Définition des broches pour le HC-SR04
const int trigPin = A1;
const int echoPin = A0;

// Définition des broches pour le 74hc595
const int latchPin = D7;
const int clockPin = D6;
const int dataPin = D8;

// Définition des broches pour les LEDs
const int redLed = D9;
const int greenLed = A5;
const int yellowLed = D13;

// Définition de la broche pour le buzzer
const int buzzerPin = A7;

// Définition de la broche pour le Switch
const int switchPin = A2;

// Initialisation de la bibliothèque Ultrasonic
Ultrasonic ultrasonic(trigPin, echoPin);

// Initialisation des afficheurs à 7 segments
ShiftRegister74HC595 sr1(1, dataPin, clockPin, latchPin);

void setup() {
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(switchPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  // Lecture de l'état du switch
  bool isSystemActive = digitalRead(switchPin) == LOW;

  if (isSystemActive) {
    // Mesure de la distance
    long distance = ultrasonic.Ranging(CM); // Mesure en centimètres

    // Affichage de la distance sur le moniteur série
    Serial.print("Distance: ");
    Serial.print(distance);
    Serial.println(" cm");

    // Allumage de la LED verte si la distance est supérieure à un seuil
    if (distance > 10) {
      digitalWrite(greenLed, HIGH);
      digitalWrite(redLed, LOW);
      digitalWrite(buzzerPin, LOW);
      sr1.setAllHigh(); // Affichage de la distance sur le premier afficheur à 7 segments
      sr2.setAllLow(); // Affichage de la distance sur le deuxième afficheur à 7 segments
    } else {
      // Allumage de la LED rouge si la distance est inférieure au seuil
      digitalWrite(greenLed, LOW);
      digitalWrite(redLed, HIGH);
      digitalWrite(buzzerPin, HIGH);
      sr1.setAllLow(); // Affichage de la distance sur le premier afficheur à 7 segments
      sr2.setAllHigh(); // Affichage de la distance sur le deuxième afficheur à 7 segments
    }
  } else {
    // Éteindre les LEDs et le buzzer si le système n'est pas actif
    digitalWrite(greenLed, LOW);
    digitalWrite(redLed, LOW);
    digitalWrite(buzzerPin, LOW);
    sr1.setAllLow(); // Éteindre le premier afficheur à 7 segments
    sr2.setAllLow(); // Éteindre le deuxième afficheur à 7 segments
  }
}
$abcdeabcde151015202530354045505560fghijfghij
74HC595
74HC595