#include <Tone.h>
const int buttonPin = A4; 
const int trigPin = A1;
const int echoPin = A3;
const int redled = A2;
const int yellowled = A7;
const int greenled = A5;
const int buzzerPin = A6;
int buttonState = 0;
const int dataPin = D9;   /* DS */
const int clockPin = D7;  /* SHCP */
const int latchPin = D8;  /* STCP */
int distancedigit;

void displayDistance(int distance) {
  byte abc[] = {
    B11111100, // 0
    B01100000, // 1
    B11011010, // 2
    B11110010, // 3
    B01100110, // 4
    B10110110, // 5
    B00111110, // 6
    B11100000, // 7
    B11111110, // 8
    B11100110, // 9
  };
  
}

void setup() {
  Serial.begin(9600);
  pinMode(buttonPin, INPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(redled, OUTPUT);
  pinMode(yellowled, OUTPUT);
  pinMode(greenled , OUTPUT);

  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    long duration = pulseIn(echoPin, HIGH);
    long distance = (duration / 58.0);
    Serial.println("la distance est : ");
    Serial.println(distance);

    if (distance > 120.0 ) {
      Serial.println("Distance > 120cm");
      digitalWrite(greenled, HIGH);
      digitalWrite(redled, LOW);
      digitalWrite(yellowled, LOW);
    } else if (30.0 < distance && distance < 120.0) {
      Serial.println("Distance between 30 and 120 cm");
      digitalWrite(redled, LOW);
      digitalWrite(yellowled, HIGH);
      digitalWrite(greenled, LOW);
      int duration = map(distance , 30 , 120, 0, 1000);
      tone(buzzerPin, 400);
      delay(200);
      Serial.print("Duration");
      Serial.println(duration);
    } else if (distance < 30.0) {
      digitalWrite(redled, HIGH);
      digitalWrite(yellowled, LOW);
      digitalWrite(greenled, LOW);
      tone(buzzerPin , 440 , 0);
    } 
    
  }
    distancedigit = distance / 100;
    int distanceDigit1 = distancedigit / 10;
    int distanceDigit2 = distancedigit % 10;

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, abc[distanceDigit1]);
  shiftOut(dataPin, clockPin, MSBFIRST, abc[distanceDigit2]);
  digitalWrite(latchPin, HIGH);
  delay(500); 
  displayDistance(distance);
}
Loading
st-nucleo-l031k6
74HC595
74HC595