#define buttonPin A0
#define trigPin A1
#define echoPin A2
#define yellowLed A3
#define redLed A4
#define buzzerPin A5
#define greenled A6

const int DS = D2;   
const int STCP = D3;  
const int SHCP = D4;  

int duration, sound, time_delay;
int buttonState;
long distance;
float distance_meters;

byte digits[] = {
  0b01111110, //  0
  0b00001010, //  1
  0b10110110, //  2
  0b10011110, //  3
  0b11001010, //  4
  0b11011100, //  5
  0b11111100, //  6
  0b00001110, //  7
  0b11111110, //  8
  0b11011110  //  9
};

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(redLed, OUTPUT);
  pinMode(yellowLed, OUTPUT);
  pinMode(greenled, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);

  pinMode(DS, OUTPUT);
  pinMode(STCP, OUTPUT);
  pinMode(SHCP, OUTPUT);
}
  

void loop() {
  buttonState = digitalRead(buttonPin);

  if (buttonState == LOW) {
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);

    duration = pulseIn(echoPin, HIGH);
    distance = (duration / 2) * 0.0343;
    Serial.print("Distance in CM: ");
    Serial.println(distance);
    distance_meters = distance * 0.01;
    Serial.print("Distance in metre: ");
    Serial.println(distance_meters);

    int distanceCategory;

    if (distance >= 120) {
      distanceCategory = 3;
    } else if (distance > 30 && distance < 120) {
      distanceCategory = 2;
    } else if (distance <= 30) {
      distanceCategory = 1;
    }

    switch (distanceCategory) {
      case 3:
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(yellowLed, LOW);
        digitalWrite(redLed, LOW);
        sound = 0;
        time_delay = 0;
        break;
      case 2:
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(yellowLed, HIGH);
        digitalWrite(redLed, LOW);
        sound = 440;
        time_delay = map(distance, 30, 120, 100, 1000);
       
        break;
      case 1:
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(yellowLed, LOW);
        digitalWrite(redLed, HIGH);
        sound = 440;
        time_delay = 0;
        break;
      default:
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(yellowLed, LOW);
        digitalWrite(redLed, HIGH);
        sound = 0;
        time_delay = 0;
        break;
    }

    tone(buzzerPin, sound, time_delay);

    int distance_integer = int(distance_meters * 10); 

    int digit1 = distance_integer / 10; 

    int digit2 = distance_integer % 10; 
    
    digitalWrite(STCP, LOW);
    
    shiftOut(DS, SHCP, MSBFIRST, digits[digit2]);
    
    shiftOut(DS, SHCP, MSBFIRST, digits[digit1]| 0b00000001);
    
    digitalWrite(STCP, HIGH);
 
    delay(500);
  }
}
$abcdeabcde151015202530354045505560fghijfghij
Loading
st-nucleo-l031k6
74HC595
74HC595