/*
12/11/2025 - Uno + 2 servo + 4 bouton poussoir
- appui sur BP1 (JAUNE) le servo1 va à 20°à droite et y reste ; réappui sur BP1 retour à zéro
- appui sur BP2 (BLEU) le servo1 va à 20° à gauche et y reste ; réappui sur BP2 retour à zéro .
- appui sur BP3 (ROUGE) le servo2 va à 20°à droite au relâchement du BP3 retour à zéro.
- appui sur BP4 (VERT) le servo2 va à 20° à gauche au relâchement du BP4 retour à zéro.
*/
#include <Servo.h>
// Déclaration des servos
Servo servo1;
Servo servo2;
// Broches des servos
const int SERVO1_PIN = 9; // jaune
const int SERVO2_PIN = 10; // bleu
// Broches des boutons
const int BP1 = 2; // jaune
const int BP2 = 3; // bleu
const int BP3 = 4; // rouge
const int BP4 = 5; // vert
// Variables d’état
bool etatServo1Droite = false;
bool etatServo1Gauche = false;
bool ancienEtatBP1 = HIGH;
bool ancienEtatBP2 = HIGH;
bool ancienEtatBP3 = HIGH;
bool ancienEtatBP4 = HIGH;
void setup() {
Serial.begin(9600);
// Initialisation des servos
servo1.attach(SERVO1_PIN);
servo2.attach(SERVO2_PIN);
// Position initiale
servo1.write(90); // position neutre
servo2.write(90);
// Initialisation des boutons
pinMode(BP1, INPUT_PULLUP);
pinMode(BP2, INPUT_PULLUP);
pinMode(BP3, INPUT_PULLUP);
pinMode(BP4, INPUT_PULLUP);
}
void loop() {
// Lecture des boutons
bool etatBP1 = digitalRead(BP1);
bool etatBP2 = digitalRead(BP2);
bool etatBP3 = digitalRead(BP3);
bool etatBP4 = digitalRead(BP4);
// ----- BP1 : Servo1 à droite (toggle) ----- couleur JAUNE +20°
if (etatBP1 == LOW && ancienEtatBP1 == HIGH) { // détection de front descendant
etatServo1Droite = !etatServo1Droite; // bascule l’état
if (etatServo1Droite) servo1.write(110); // +20° (droite)
else servo1.write(90); // retour à 0°
}
ancienEtatBP1 = etatBP1;
// ----- BP2 : Servo1 à gauche (toggle) ----- couleur BLEU -20°
if (etatBP2 == LOW && ancienEtatBP2 == HIGH) {
etatServo1Gauche = !etatServo1Gauche;
if (etatServo1Gauche) servo1.write(70); // -20° (gauche)
else servo1.write(90);
}
ancienEtatBP2 = etatBP2;
Serial.println(etatBP3);
// ----- BP3 : Servo2 à droite (momentané) ----- couleur ROUGE +20°
if (etatBP3 == LOW) servo2.write(110); // pendant appui
else servo2.write(90); // relâché -> retour à 0° serv02
// ----- BP4 : Servo2 à gauche (momentané) ----- couleur VERT -20°
Serial.println(etatBP4);
if (etatBP4 == LOW) servo2.write(70); // pendant appui
else servo2.write(90); // relâché -> retour à 0° serv02
delay(20); // petite temporisation pour la stabilité
}