#include <Servo.h>

Servo myServo;  // Création d'un objet Servo
const int buttonPin = 6;  // Pin du bouton poussoir
int buttonState = 0;      // Variable pour lire l'état du bouton
int lastButtonState = 0;  // Variable pour enregistrer le dernier état du bouton
int servoPosition = 0;    // Position actuelle du servomoteur, initialement à 0°

void setup() {
  myServo.attach(9);  // Attachement du servomoteur à la broche D9
  pinMode(buttonPin, INPUT_PULLUP);  // Définir le bouton comme entrée avec résistance pull-up interne
  myServo.write(servoPosition);  // Position initiale du servomoteur
}

void loop() {
  buttonState = digitalRead(buttonPin);  // Lire l'état du bouton

  // Vérifier si le bouton a été pressé (passage de HIGH à LOW)
  if (buttonState != lastButtonState && buttonState == LOW) {
    // Changer la position du servomoteur selon la position actuelle
    if (servoPosition == 0) {
      moveServo(0, 90, 5000);  // Mouvement aller de 0° à 90° en 5 secondes
      servoPosition = 90;      // Mettre à jour la position actuelle
    } else {
      moveServo(90, 0, 5000);  // Mouvement retour de 90° à 0° en 5 secondes
      servoPosition = 0;       // Mettre à jour la position actuelle
    }
    delay(50);  // Débouncing
  }

  lastButtonState = buttonState;  // Enregistrer l'état du bouton
}

void moveServo(int startPos, int endPos, int duration) {
  int steps = abs(endPos - startPos);      // Nombre de pas (1 degré par pas)
  int stepDelay = duration / steps;        // Délai entre chaque pas

  if (startPos < endPos) {
    for (int pos = startPos; pos <= endPos; pos++) {
      myServo.write(pos);  // Déplacer le servomoteur à la position actuelle
      delay(stepDelay);    // Attendre avant de passer à la position suivante
    }
  } else {
    for (int pos = startPos; pos >= endPos; pos--) {
      myServo.write(pos);  // Déplacer le servomoteur à la position actuelle
      delay(stepDelay);    // Attendre avant de passer à la position suivante
    }
  }
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
servo1:GND
servo1:V+
servo1:PWM
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r