#include <Servo.h>
const byte servoPin = 9;
Servo servomoteur;
int position = 0;
int pas = 1;
int incrementBalancier = 10;
int positionCible;
unsigned long dernierChangement;
// donne l'angle entre 0 et 180° par rapport à un repère ou
// 0° est la verticale, (correspond à 90° pour le servo)
// +90° est l'horizontale droite (correspond à 0° pour le servo)
// -90° est l'horizontale gauche (correspond à 180° pour le servo)
// pas de gestion d'erreur, il faut vraiment passer un angle entre -90° et +90°
int coordonneeAbsolue(int posLocale) {
return 90 - posLocale;
}
void allerA(int posLocale) {
int angle = coordonneeAbsolue(posLocale);
servomoteur.write(angle);
}
void setup() {
allerA(position);
servomoteur.attach(servoPin); // attaches the servo on pin 9 to the servo object
positionCible = 10;
dernierChangement = millis();
}
void loop() {
if (position == positionCible) {
pas = -pas;
positionCible = -positionCible;
if (pas > 0) positionCible += incrementBalancier;
positionCible = constrain(positionCible, -90, 90);
}
position += pas;
allerA(position);
delay(max(8, abs(position) / 2)) ; // on va plus vite proche de 0
}
-90° (servo @ 180)
0° (servo @ 90)
90 (servo @ 0)