Bonjour,
(n'y a-t-il que le bar pour les questions en français ?)
Voilà, je souhaite piloter un servo-moteur à partir d'une Lilygo T-Zigbee (ESP32-C3).
J'ai trouvé cette excellente page :
et j'ai choisi la seconde bibliothèque ESP32-ESP32S2-AnalogWrite pour ses fonctionnalités avancées, notamment définition de vitesse et assouplissement de trajectoire, et qui est sensée fonctionner sur un ESP32-C3.
Or, j'ai bien le positionnement, mais pas d'effet sur la vitesse (ou sur le ease).
Ci-dessous mon code, à la recherche de pistes. Merci
#include <pwmWrite.h>
#define LED 3
#define ciServoPin 8
Pwm myServo = Pwm(); // create servo object to control a servo
float gfSpeed = 1.0 ;
float gfEase = 0.5 ;
int gfPos = 50 ;
void setup() {
}
void loop() {
digitalWrite(LED, LOW);
myServo.writeServo( ciServoPin, gfPos, gfSpeed, gfEase); // sets the servo position according to the scaled value
delay(2000);
digitalWrite(LED, HIGH);
myServo.writeServo( ciServoPin, 0, gfSpeed, gfEase);
delay( 2000);
}
C'est un ESP32-C3, alors que la biblio semble faite pour un ESP32-S2 : il y a peut-être une différence subtile qui fait qu'elle ne fonctionne pas comme prévu.
Peut-être que tu devrais écrire toi-même une fonction qui "assouplit" la trajectoire : j'imagine que ça veut dire augmenter progressivement la vitesse au début du mouvement et la diminuer progressivement vers la fin.
Bonjour,
J'ai échangé avec le Dev de la biblio et eu la solution.
En fait, dans cette biblio pwmWrite, la fonction writeServo n'est pas complètement autonome, ne fonctionne pas par interruptions (par un seul appel) pour faire varier le mouvement en termes de vitesse et assouplissement.
Ce sont les appels successifs dans loop() qui recalculent chaque position intermédiaire souhaitée.
Chaque petit pas est atteint à la vitesse nominale du servo, mais la finesse du pas donne un effet ralenti/assoupli global.
Dans les exemples, on pourrait croire que les appels dans loop() ne sont que pour collecter la position intermédiaire et l'afficher en Serial, mais non, c'est indispensable d'appeler writeServo avec les mêmes arguments aussi souvent que possible.