const int ledPin = A2;
const int trigPin = A5;
const int echoPin = A0;
const int ledRouge = LED_BUILTIN;
const int ledOrange = A3;
const int PIN_BUTTON = A0;
const int BUZZER = A1;
const int SHCP=11;
const int STCP=10;
const int DS=13;
void displayDistance(float distance) {
// Séparer les chiffres après la virgule
int whole = int(distance);
int decimal = int((distance - whole) * 10);
// const int MR=9;
byte segments[] = {
B01111110, // 0
B00110000, // 1
B01101101, // 2
B01111001, // 3
B00110011, // 4
B01011011, // 5
B01011111, // 6
B01110000, // 7
B01111111, // 8
B01111011 // 9
};
digitalWrite(STCP, LOW);
shiftOut(DS, SHCP, MSBFIRST, segments[0]);
shiftOut(DS, SHCP, MSBFIRST, segments[0]);
digitalWrite(STCP, HIGH);
// digitalWrite(STCP, LOW);
// digitalWrite(DS, LOW); // Éteindre le point décimal
// digitalWrite(STCP, HIGH);
// // Envoyer les données pour le deuxième afficheur (chiffre après la virgule)
// digitalWrite(STCP, LOW);
// shiftOut(DS, SHCP, MSBFIRST, segments[decimal]);
// digitalWrite(STCP, HIGH);
// digitalWrite(STCP, LOW);
// digitalWrite(DS, LOW); // Éteindre le point décimal
// digitalWrite(STCP, HIGH);
}
int etatBouton = 0;
long duration, dis;
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
pinMode(ledOrange, OUTPUT);
pinMode(ledRouge, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(PIN_BUTTON, INPUT_PULLUP);
pinMode(BUZZER, OUTPUT);
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
pinMode(DS, OUTPUT);
digitalWrite(STCP, LOW);
digitalWrite(STCP, HIGH);
while(1);
}
void loop() {
etatBouton = digitalRead(PIN_BUTTON);
if (etatBouton == HIGH) {
digitalWrite(ledRouge, LOW);
digitalWrite(ledPin, LOW);
digitalWrite(ledOrange, LOW);
noTone(BUZZER);
digitalWrite(BUZZER,LOW);
} else {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
int duration = pulseIn(echoPin, HIGH);
float dis = duration / 58.0;
Serial.print("Distance en CM: ");
Serial.println(dis);
if (dis > 120) {
digitalWrite(ledPin, HIGH);
Serial.println("diode VERTE Allumé");
noTone(BUZZER);
digitalWrite(BUZZER,LOW);}
else if (dis >=75 && dis <=120){
digitalWrite(ledPin, LOW);
digitalWrite(ledOrange, HIGH);
digitalWrite(ledRouge, LOW);
tone(BUZZER, 440);
delay(200);
noTone(BUZZER);
digitalWrite(BUZZER,LOW);
Serial.print("Temps d'arrêt: ");
Serial.print(map(dis, 75, 120, 500, 1000));
Serial.println(" ms");
delay(map(dis, 75, 120, 500, 1000));
}
else if (dis > 30 && dis <= 75) {
digitalWrite(ledOrange, HIGH);
Serial.println("diode Orange allumée");
digitalWrite(BUZZER, HIGH);
tone(BUZZER, 440);
delay(200);
noTone(BUZZER);
digitalWrite(BUZZER,LOW);
Serial.print("Temps d'arrêt: ");
Serial.print(map(dis, 30, 75, 0, 500));
Serial.println(" ms");
delay(map(dis, 30, 75, 0, 500));}
else{
digitalWrite(ledRouge, HIGH);
Serial.println("diode Rouge allumée");
tone(BUZZER,440);
delay(200);
digitalWrite(BUZZER,LOW);}
}
displayDistance(dis);
}