#include <NewPing.h> //la bibliothèque NewPing pour utiliser le capteur ultrasonique
#include <Tone.h> //la bibliothèque Tone pour utiliser le buzzer
uint16_t duration;//Déclaration de la variable duration pour stocker la durée du son
const int trigPin = A0; // Broche du capteur pour l'émission du signal
const int echoPin = A4; // Broche du capteur pour la réception du signal
const int RED_LED_PIN = D4; // Broche de la LED rouge
const int ORANGE_LED_PIN = D6; // Broche de la LED orangee
const int GREEN_LED_PIN = D5; // Broche de la LED verte
const int BUZZER_PIN = A7;
const int buttonPin = A2;
#define SHCP D7
#define STCP D8
#define DS D2
NewPing sonar(trigPin, echoPin);// Création d'une instance de la classe NewPing pour le capteur
// Fonction pour contrôler l'affichage des chiffres sur les afficheurs sept segments
void displayDistance(int distance) {
// Définir les caractères pour les chiffres de 0 à 9 sur les afficheurs sept segments
byte segments[] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110, // 9
};
// Séparer les chiffres de la distance
int digit1 = distance / 10;
int digit2 = distance % 10;
// Activer la sortie de l'affichage
digitalWrite(STCP, LOW);
// Envoyer les données pour le premier afficheur
shiftOut(DS, SHCP, MSBFIRST, segments[digit1]);
// Envoyer les données pour le deuxième afficheur
shiftOut(DS, SHCP, MSBFIRST, segments[digit2]);
// Désactiver la sortie de l'affichage
digitalWrite(STCP, HIGH);
}
void setup() {
Serial.begin(9600);
pinMode(RED_LED_PIN, OUTPUT);// Configuration de la broche de la LED rouge en sortie
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ORANGE_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
pinMode(DS, OUTPUT);
}
// Initialisation de la communication série à 115200 bauds
void loop() {
int buttonState = digitalRead(buttonPin); // Lecture de l'état du bouton
unsigned int distance = sonar.ping_cm();// Mesure de la distance avec le capteur
Serial.println("Distance en cm :");// Affichage de la distance mesurée
Serial.println(distance);
if (buttonState == LOW) // Vérification si le bouton est enfoncé
{
if (distance > 120)
{
digitalWrite(RED_LED_PIN, LOW); //ettaindre la led rouge
digitalWrite(ORANGE_LED_PIN, LOW); //Éteindre la LED orange
digitalWrite(GREEN_LED_PIN, HIGH); //allumer la led verte
}
else if ((distance > 30.0) && (distance <= 120.0))
{
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(ORANGE_LED_PIN, HIGH);
duration = map(distance - 30, 90, 0, 1000, 0); // Calcul de la durée du son du buzzer en fonction de la distance
tone(BUZZER_PIN, 440);// Générer un son sur le buzzer
delay(200);// Attendre 200 millisecondes
noTone(BUZZER_PIN); // Arrêter le son du buzzer
digitalWrite(BUZZER_PIN, LOW); // Éteindre le buzzer
delay(duration);// Attendre la durée calculée
Serial.print("La Duration ");
Serial.println(duration);
delay(duration);// Attendre la durée calculée
}
else
{
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(ORANGE_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
tone(BUZZER_PIN, 440, 0);// Générer un son sur le buzzer
}
}
else
{
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(ORANGE_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
}
displayDistance(distance);
}