#define echoPin A3
#define trigPin A1
#define greenLED A5
#define orangeLED A7
#define redLED A2
#define switchPin A4
#define buzzerPin A6
#define SHCP D7
#define STCP D8
#define DS D9
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);
if (switchState == HIGH) {
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);
if (distance > 120) {
digitalWrite(greenLED, HIGH);
digitalWrite(orangeLED, LOW);
digitalWrite(redLED, LOW);
}
else if(distance > 30 && distance <=120){
digitalWrite(greenLED, LOW);
digitalWrite(orangeLED, HIGH);
digitalWrite(redLED, LOW);
tone(buzzerPin, 440);
delay(200);
noTone(buzzerPin);
digitalWrite(buzzerPin, LOW);
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(greenLED, LOW);
digitalWrite(orangeLED, LOW);
digitalWrite(redLED, HIGH);
tone(buzzerPin, 440);
delay(200);
}
}
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);
}
Loading
st-nucleo-l031k6
st-nucleo-l031k6