#define PIN_BUTTON A1
#define PIN_TRIG A6
#define PIN_ECHO A2
#define vert A4
#define orange A5
#define rouge A0
#define BUZZER_PIN A7
#include <SPI.h> // Include the SPI library
#include <Wire.h> // Include the Wire library for Serial communication
#define DATA_PIN D11 // Data pin DS
#define CLOCK_PIN D13 // Clock pin SHCP
#define LATCH_PIN D10 // Latch pin STCP
void shiftOutCustom(byte dataPin, byte clockPin, byte latchPin, byte val) {
digitalWrite(latchPin, LOW); // Pull latch low to start sending data
shiftOut(dataPin, clockPin, LSBFIRST, val);
digitalWrite(latchPin, HIGH); // Pull latch high to update the outputs
}
const byte segments[] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110 // 9
};
void setup() {
pinMode(BUZZER_PIN, OUTPUT); // Set the buzzer pin as an output
Serial.begin(115200);
pinMode(PIN_BUTTON, INPUT_PULLUP);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(rouge, OUTPUT);
pinMode(orange, OUTPUT);
pinMode(vert, OUTPUT);
// 7-segment display setup
Serial.begin(9600);
pinMode(DATA_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT); // Set latch pin as output
}
void loop() {
int button_state=digitalRead(PIN_BUTTON) ;
if (button_state== LOW)
{
delay(10);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
int duration = pulseIn(PIN_ECHO, HIGH);
float distance = duration / 58.0;
Serial.print("Distance in CM: ");
Serial.println(distance);
// Display the distance on the 7-segment display
int tens = (int)distance / 10;
int ones = (int)distance % 10;
shiftOutCustom(DATA_PIN, CLOCK_PIN, LATCH_PIN, segments[tens]);
delay(500);
shiftOutCustom(DATA_PIN, CLOCK_PIN, LATCH_PIN, segments[ones]);
delay(500);
if(distance <= 30) {
tone(BUZZER_PIN, 440, 0);
digitalWrite(rouge, HIGH);
digitalWrite(orange, LOW);
digitalWrite(vert, LOW);
}
else if ((distance > 30 )&& (distance <= 120)) {
digitalWrite(rouge, LOW);
digitalWrite(orange, HIGH);
digitalWrite(vert, LOW);
int dur = map(distance - 30, 90, 0, 1000,0);
tone(BUZZER_PIN,440);
delay(200);
noTone(BUZZER_PIN);
digitalWrite(BUZZER_PIN, LOW);
delay(dur);
}
else if(distance > 120) {
digitalWrite(rouge, LOW);
digitalWrite(orange, LOW);
digitalWrite(vert, HIGH);
noTone(BUZZER_PIN);
}
}
}