#define echoPin A6
#define trigPin A5
#define greenLED A1
#define yellowLED A4
#define redLED A3
#define switchPin D2
#define buzzerPin D3
#define SHCP D5
#define STCP D4
#define DS D3
long duration, distance;
byte segments[] = {
B01111110, // 0
B00001010, // 1
B10110110, // 2
B10011110, // 3
B11001010, // 4
B11011100, // 5
B11111100, // 6
B00001110, // 7
B11111110, // 8
B11011110 // 9
};
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(greenLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(switchPin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
pinMode(DS, OUTPUT);
}
void loop() {
if (digitalRead(switchPin) == LOW) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration * 0.034 / 2)/10;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Contrôle des LED en fonction de la distance
if (distance > 12.0) {
digitalWrite(greenLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
}
else if (distance >= 7.5 && distance <= 12.0) {
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(redLED, LOW);
tone(buzzerPin, 440);
delay(200);
noTone(buzzerPin);
Serial.print("Temps d'arrêt: ");
Serial.print(map(distance, 5, 50, 500, 1000));
Serial.println(" ms");
delay(map(distance, 5, 50, 500, 1000));
}
else if (distance > 3.0 && distance <= 7.5) {
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(redLED, LOW);
tone(buzzerPin, 440);
delay(200);
noTone(buzzerPin);
Serial.print("Temps d'arrêt: ");
Serial.print(map(distance, -30, 5, 0, 500));
Serial.println(" ms");
delay(map(distance, -30, 5, 0, 500));
}
else {
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
Serial.println("Diode Rouge allumée");
tone(buzzerPin, 440);
delay(200);
digitalWrite(buzzerPin, LOW);
}
}
else {
// Si l'interrupteur est désactivé, éteindre toutes les LED et le buzzer
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
noTone(buzzerPin);
digitalWrite(buzzerPin, LOW);
}
int digit1 = distance / 10;
int digit2 = distance % 10;
digitalWrite(STCP, LOW);
shiftOut(DS, SHCP, MSBFIRST, segments[digit2]);
shiftOut(DS, SHCP, MSBFIRST, segments[digit1]); // Activer le point décimal
digitalWrite(STCP, HIGH);
delay(50);
}