#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
#define trigPin 14
#define echoPin 15
int boutonPin = 1;
int bouton1Pin = 8;
int bouton2Pin = 9;
int bouton3Pin = 10;
int etatBouton = LOW;
int etatBoutonPrecedent = LOW;
int ledPins[] = {3, 4, 5, 6, 7};
void allumerLEDs() {
for (int i = 0; i < 5; i++) {
digitalWrite(ledPins[i], HIGH);
}
}
void ouvrirEtFermer(Servo servo) {
long duree;
int distance;
int distancePrecedente;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duree = pulseIn(echoPin, HIGH);
distancePrecedente = duree * 0.034 / 2;
allumerLEDs(); // Allume les LEDs
servo.write(0); // Ouvre le servo
for (int i = 0; i < 5; i++) {
delay(1000);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW); // Attendre 1 seconde (facultatif)
duree = pulseIn(echoPin, HIGH);
distance = duree * 0.034 / 2;
if ((distance > (distancePrecedente + 5)) || (distance < (distancePrecedente - 5))) {
i = 0;
allumerLEDs();
delay(1000);
distancePrecedente = distance;
}
digitalWrite(ledPins[i], LOW);
}
servo.write(90); // Ferme le servo
}
void setup() {
servo1.attach(11);
servo2.attach(12);
servo3.attach(13);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(boutonPin, INPUT);
pinMode(bouton1Pin, INPUT);
pinMode(bouton2Pin, INPUT);
pinMode(bouton3Pin, INPUT);
for (int i = 11; i <= 13; i++) {
pinMode(i, OUTPUT);
}
for (int i = 3; i <= 7; i++) {
pinMode(i, OUTPUT);
}
}
void loop() {
etatBouton = digitalRead(boutonPin);
if (etatBouton == HIGH && etatBoutonPrecedent == LOW) {
int choixAleatoire = random(0, 3);
for (int i = 11; i <= 13; i++) {
digitalWrite(i, HIGH); // Ferme tous les servos
}
switch (choixAleatoire) {
case 0:
ouvrirEtFermer(servo1);
break;
case 1:
ouvrirEtFermer(servo2);
break;
case 2:
ouvrirEtFermer(servo3);
break;
}
etatBoutonPrecedent = HIGH; // Met à jour l'état précédent du bouton
} else if (etatBouton == LOW) {
etatBoutonPrecedent = LOW; // Met à jour l'état précédent du bouton
}
for (int i = 8; i <= 10; i++) {
int boutonEtat = digitalRead(i);
if (boutonEtat == HIGH) {
switch (i) {
case 10:
ouvrirEtFermer(servo1);
break;
case 9:
ouvrirEtFermer(servo2);
break;
case 8:
ouvrirEtFermer(servo3);
break;
}
}
}
}