#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
}
}
}