Auteur Sujet: PCA9685 et servos  (Lu 8910 fois)

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
PCA9685 et servos
« le: mai 21, 2022, 07:29:43 pm »
Bonsoir,
Peut-on lire la position d'un servo à travers un PCA9685, c'est à dire l'équivalent d'un "servo.read()" quand le servo est branché sur l'Arduino ?

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1109
  • HO avec DCC++
    • Voir le profil
Re : PCA9685 et servos
« Réponse #1 le: mai 22, 2022, 06:15:54 pm »
servo.read() de la bibliothèque servo n'est pas (comme son nom pourrait le laisser croire) une lecture de l'information qui serait stockée dans le servo par exemple mais tout simplement servo.read() est une méthode de la class Servo qui retourne la dernière valeur en mémoire écrite au travers d'un servo.write(xxx) ou servo.writeMicroseconds(xxx).

Pour illustrer ce que je dis, imaginez que vous fassiez tourner manuellement le servo pour lui faire changer d'angle, servo.read() ne retournera pas la position physique mais la valeur stockée dans le programme !

C'est donc uniquement logiciel. Il faut savoir quelle bibliothèque vous utilisez, et regarder le fichier de définition (.h). Mais il serait bien étonnant que cette méthode retournant la position n'existe pas.

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1717
    • Voir le profil
Re : PCA9685 et servos
« Réponse #2 le: mai 25, 2022, 10:53:00 am »
Bonjour,

quelle bibliothèque utilisez vous ? Celle d'Adafruit ?
Cordialement

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Re : PCA9685 et servos
« Réponse #3 le: juin 18, 2022, 03:11:39 pm »
Bonjour,
Oui !

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1717
    • Voir le profil
Re : PCA9685 et servos
« Réponse #4 le: juin 19, 2022, 01:38:14 pm »
Dans ce cas, je vois qu'il y a une fct getPWM pour lire la valeur de PWM. C'est lu du PCA.

La valeur récupérée ne correspondra pas à celle mise via writeMicroseconds car cette fct calcule une valeur de PWM à envoyer au PCA :

https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library/blob/d265f74fc0e66632e6dafc787c95b008f3245550/Adafruit_PWMServoDriver.cpp#L283
Cordialement