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