#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 = D4; // Broche du capteur pour l'émission du signal
const int echoPin = D3; // Broche du capteur pour la réception du signal
const int RED_LED_PIN = D10; // Broche de la LED rouge
const int ORANGE_LED_PIN = D9; // Broche de la LED orangee
const int GREEN_LED_PIN = D5; // Broche de la LED verte
const int BUZZER_PIN = A7; 
const int buttonPin = D7;
#define  SHCP A5 
#define STCP A4
#define DS A6
float distance_meters;
long distance ;
int digit1;
int digit2;

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
  // Définir les caractères pour les chiffres de 0 à 9 sur les afficheurs sept segments
  byte digits[] = {
  0b01111110, // digit 0
  0b00001010, // digit 1
  0b10110110, // digit 2
  0b10011110, // digit 3
  0b11001010, // digit 4
  0b11011100, // digit 5
  0b11111100, // digit 6
  0b00001110, // digit 7
  0b11111110, // digit 8
  0b11011110  // digit 9
};

  



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 );
  distance_meters = distance * 0.01;
  Serial.println("Distance en meters :");// Affichage de la distance mesurée
  Serial.println(distance_meters);
  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);

    }
 
   int distance_integer = int(distance_meters / 10);

   
  digit1 = distance / 100; // Chiffre des centaines
  digit2 = (distance % 100) / 10; // Chiffre des dizaines
 
    
    digitalWrite(STCP, LOW);
    
    shiftOut(DS, SHCP, MSBFIRST, digits[digit2]);
    
    shiftOut(DS, SHCP, MSBFIRST, digits[digit1]| 0b00000001);
    
    digitalWrite(STCP, HIGH);
 
    delay(500);
}
Loading
st-nucleo-l031k6
74HC595
74HC595