// Définition des broches
#define TRIG_PIN D5
#define ECHO_PIN D4
#define LED_VERTE A7
#define LED_ORANGE A3
#define LED_ROUGE A2
#define INTERRUPTEUR A1
#define BUZZER D6
const int SHCP = D0;
const int STCP = D3;
const int DS = D2;
byte digits[] = {
0b01111110, // 0
0b00001100, // 1
0b10110110, // 2
0b10011110, // 3
0b11001100, // 4
0b11011010, // 5
0b11111010, // 6
0b00001110, // 7
0b11111110, // 8
0b11011110 // 9
};
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_VERTE, OUTPUT);
pinMode(LED_ORANGE, OUTPUT);
pinMode(LED_ROUGE, OUTPUT);
pinMode(INTERRUPTEUR, INPUT_PULLUP);
pinMode(BUZZER, OUTPUT);
pinMode(DS, OUTPUT);
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
digitalWrite(LED_VERTE, LOW);
digitalWrite(LED_ORANGE, LOW);
digitalWrite(LED_ROUGE, LOW);
digitalWrite(BUZZER, LOW);
}
void loop() {
bool etatInterrupteur = digitalRead(INTERRUPTEUR);
if (etatInterrupteur == HIGH) {
Serial.println("🛑 Interrupteur OFF - Système désactivé");
digitalWrite(LED_VERTE, LOW);
digitalWrite(LED_ORANGE, LOW);
digitalWrite(LED_ROUGE, LOW);
digitalWrite(BUZZER, LOW);
return;
}
Serial.println("✅ Interrupteur ON - Système activé");
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 60000);
if (duration == 0) {
Serial.println("⚠️ Pas de signal reçu ! Vérifiez le capteur.");
return;
}
float distance = duration * 0.034 / 2;
Serial.print("📏 Distance mesurée : ");
Serial.print(distance);
Serial.println(" cm");
digitalWrite(LED_VERTE, LOW);
digitalWrite(LED_ORANGE, LOW);
digitalWrite(LED_ROUGE, LOW);
digitalWrite(BUZZER, LOW);
if (distance > 120) {
digitalWrite(LED_VERTE, HIGH);
Serial.println("🟢 Tout est clair. Distance sécurisée.");
} else if (distance >= 30 && distance <= 120) {
digitalWrite(LED_ORANGE, HIGH);
Serial.println("🟠 Attention ! Objet détecté.");
} else {
Serial.println("🔴 DANGER ! 🚨 Objet trop proche !");
for (int i = 0; i < 3; i++) {
digitalWrite(LED_ROUGE, HIGH);
digitalWrite(BUZZER, HIGH);
delay(200);
digitalWrite(LED_ROUGE, LOW);
digitalWrite(BUZZER, LOW);
delay(200);
}
digitalWrite(LED_ROUGE, HIGH);
digitalWrite(BUZZER, HIGH);
}
// Affichage sur le 7 segments
int digit1, digit2;
if (distance < 100) {
digit1 = 0;
digit2 = ((int)distance % 100) / 10;
} else {
digit1 = ((int)distance / 100);
digit2 = ((int)distance % 100) / 10;
}
digitalWrite(STCP, LOW);
shiftOut(DS, SHCP, MSBFIRST, digits[digit2]);
shiftOut(DS, SHCP, MSBFIRST, digits[digit1] | 0b00000001);
digitalWrite(STCP, HIGH);
delay(500);
}
Loading
st-nucleo-l031k6
st-nucleo-l031k6