#include <Servo.h>
#define SERVO_PIN 9
#define INPUT_PIN 2
Servo servoMotor;
// États de la machine à état
enum State {
STATE_STOPPED, // État arrêt
STATE_1,
STATE_2
};
State currentState = STATE_STOPPED;
unsigned long stateStartTime;
unsigned long nextStateTime;
int nextAngle;
int buttonState = HIGH;
int lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
pinMode(INPUT_PIN, INPUT_PULLUP); // Activation de la résistance interne pull-up
servoMotor.attach(SERVO_PIN);
servoMotor.write(0); // Initialiser le servo à la position 2 (0 degrés)
}
void loop() {
// Lecture de l'état du bouton avec débouncing
int reading = digitalRead(INPUT_PIN);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if (millis() - lastDebounceTime > debounceDelay) {
if(reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
// Le bouton a été appuyé, démarrer ou arrêter le système
if (currentState == STATE_STOPPED) {
currentState = STATE_2;
nextAngle = 0;
nextStateTime = random(2000, 8000); // Période aléatoire entre 2 et 8 secondes
stateStartTime = millis();
} else {
currentState = STATE_STOPPED;
nextAngle = 0;
servoMotor.write(nextAngle); // Mettre à jour la position du servo en position 2 (0°)
}
//else {nextAngle = 0};
}
}
}
lastButtonState = reading;
// Vérifier si le temps est écoulé pour passer à l'état 1 ou 2
if (millis() - stateStartTime >= nextStateTime) {
if (currentState == STATE_1) {
currentState = STATE_2;
nextAngle = 0;
} else {
currentState = STATE_1;
nextAngle = 90;
}
nextStateTime = random(2000, 8000); // Période aléatoire entre 2 et 8 secondes
stateStartTime = millis();
}
// Mettre à jour la position du servo selon l'état actuel
servoMotor.write(nextAngle);
}