#define echoPin A0
#define trigPin A1
#define greenLED A4
#define orangeLED A3
#define redLED A2
#define switchPin D1
#define buzzerPin D2
#define SHCP D5
#define STCP D4
#define DS D3
long duration, distance;
byte segments[] = {
B01111111, // 0
B00001011, // 1
B10110111, // 2
B10011111, // 3
B11001011, // 4
B11011101, // 5
B11111101, // 6
B00001111, // 7
B11111111, // 8
B11011111, // 9
};
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(greenLED, OUTPUT);
pinMode(orangeLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(switchPin, INPUT_PULLUP);
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
pinMode(DS, OUTPUT);
}
void loop() {
int switchState = digitalRead(switchPin); // Lire l'état de l'interrupteur
if (switchState == HIGH) { // Si l'interrupteur est activé (appuyé)
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration * 0.034 / 2)/10;
Serial.println(distance);
// Contrôle des diodes en fonction de la distance
if (distance > 12.0) { // Si la distance est supérieure à 1.2 m (120 cm)
digitalWrite(greenLED, HIGH); // Allumer la LED verte
digitalWrite(orangeLED, LOW); // Éteindre la LED orange
digitalWrite(redLED, LOW); // Éteindre la LED rouge
}
else if (distance >= 07.5 && distance <= 12.0) { // Si la distance est entre 75 cm et 120 cm
digitalWrite(greenLED, LOW); // Éteindre la LED verte
digitalWrite(orangeLED, HIGH); // Allumer la LED orange
digitalWrite(redLED, LOW); // Éteindre la LED rouge
tone(buzzerPin, 440); // Activer le buzzer avec une fréquence de 440 Hz
delay(200); // Attendre 200 ms
noTone(buzzerPin); // Éteindre le buzzer
digitalWrite(buzzerPin, LOW);
Serial.print("Temps d'arrêt: ");
Serial.print(map(distance, 5, 50, 500, 1000)); // Correspondance de la distance avec le temps d'arrêt
Serial.println(" ms");
delay(map(distance, 5, 50, 500, 1000)); // Attendre un délai variable en fonction de la distance
}
else if(distance > 3.0 && distance <=7.5){ // Si la distance est inférieure à 75 cm
digitalWrite(greenLED, LOW); // Éteindre la LED verte
digitalWrite(orangeLED, HIGH); // Éteindre la LED orange
digitalWrite(redLED, LOW); // Allumer la LED rouge
tone(buzzerPin, 440); // Activer le buzzer avec une fréquence de 440 Hz
delay(200); // Attendre 200 ms
noTone(buzzerPin); // Éteindre le buzzer
digitalWrite(buzzerPin, LOW);
Serial.print("Temps d'arrêt: ");
Serial.print(map(distance, -30, 5, 0, 500)); // Correspondance de la distance avec le temps d'arrêt
Serial.println(" ms");
delay(map(distance, -30, 5, 0, 500)); // Attendre un délai variable en fonction de la distance
}
else {
digitalWrite(greenLED, LOW); // Éteindre la LED verte
digitalWrite(orangeLED, LOW); // Éteindre la LED orange
digitalWrite(redLED, HIGH); // Allumer la LED rouge
tone(buzzerPin, 440); // Activer le buzzer avec une fréquence de 440 Hz
delay(200); // Attendre 200 ms
}
}
else {
// Si l'interrupteur est désactivé, éteindre toutes les LED et le buzzer
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(orangeLED, LOW);
digitalWrite(redLED, LOW);
noTone(buzzerPin); // Éteindre le buzzer
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]);
digitalWrite(STCP, HIGH);
delay(50);
}
sr1:Q1
sr1:Q2
sr1:Q3
sr1:Q4
sr1:Q5
sr1:Q6
sr1:Q7
sr1:GND
sr1:Q7S
sr1:MR
sr1:SHCP
sr1:STCP
sr1:OE
sr1:DS
sr1:Q0
sr1:VCC
sr2:Q1
sr2:Q2
sr2:Q3
sr2:Q4
sr2:Q5
sr2:Q6
sr2:Q7
sr2:GND
sr2:Q7S
sr2:MR
sr2:SHCP
sr2:STCP
sr2:OE
sr2:DS
sr2:Q0
sr2:VCC
Loading
st-nucleo-l031k6
st-nucleo-l031k6
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
sw1:1
sw1:2
sw1:3
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
bz1:1
bz1:2
sevseg2:COM.1
sevseg2:COM.2
sevseg2:A
sevseg2:B
sevseg2:C
sevseg2:D
sevseg2:E
sevseg2:F
sevseg2:G
sevseg2:DP
sevseg3:COM.1
sevseg3:COM.2
sevseg3:A
sevseg3:B
sevseg3:C
sevseg3:D
sevseg3:E
sevseg3:F
sevseg3:G
sevseg3:DP