Bravo ! Cela commence à prendre forme.
N'y aurait-il pas moyen de faire des mouvements avec une vitesse progressive ?
En 3 paliers montants, puis 3 paliers descendants, par exemple.
Tu es toujours sur PC ?
Je suis toujours sur PC.
Pour la vitesse progressive, c'est possible. L'API fournie par Phidget pour le contrôleur de servo permet cette option. C'est ce qu'ils appellent le speedRamping : un booléen permet d'indiquer si on souhaite une vitesse progressive ou pas (on peut également définir l'accélération). Mais je l'ai désactivée hier car cela donne des effets un peu bizarre selon comment je change les positions des servos. Je m'explique. Dans l'interface graphique que j'ai faite (application Web), j'utilise des sliders (ou curseurs) pour faire varier les angles des yeux. J'ai deux façons de passer d'un angle A à un angle B:
- Soit cliquer directement au niveau de l'angle que je veux atteindre, c'est à dire passer de A vers B directement en envoyant un seul évènement "va vers B" : setPosition(
. Là, le speedRamping donne un effet satisfaisant. La vitesse est progressive entre A et B.
- Soit faire glisser le slider progressivement pour passer de A vers B. Mais cela va envoyer plusieurs évènements successifs : un évènement à chaque changement de valeur du curseur étant donné que je ne sais pas jusqu'où je vais faire glisser le curseur : setPosition(A+1), setPosition(A+2), setPosition(A+3), ..., setPosition(
. Cela va avoir pour effet d'appliquer le speedRamping à chaque setPosition et donc de repartir d'une vitesse nulle à chaque degré. Résultat : des à-coups ou effet de ralentissement. C'est pour ça que pour l'instant, je l'ai désactivée ce qui permet d'avoir une vitesse constante quand je fais glisser le curseur.
Je ne sais pas si je suis très clair. 
Je pense que c'est surtout la gestion côté interface graphique (contrôle manuel) qu'il faudrait que je gère mieux. Car à priori, lorsque ce sera "l'intelligence artificielle" qui contrôlera la position des yeux, ce sera pour aller à un angle précis pour adopter une expression faciale en envoyant qu'un seul évènement. Là, le speedRamping pourra être appliqué.
J'ai aussi implémenté une autre façon de bouger les servos : avancer, reculer ou stopper. Là, je positionne le servo à son angle MAX (ou MIN), ou je mets la vitesse à 0 pour le stop, par le biais d'un seul évènement. Là, le speedRamping pourrait s'appliquer.
Surtout que je compte aussi contrôler les mouvements par l'intermédiaire d'une manette type PS3 en Bluetooth. Et là, je ne pourrais pas donner d'angle précis, seulement des instructions de type Avancer, Reculer ou Stopper (que ce soit avec les manettes analogiques pour les mouvements du cou ou les boutons arrières pour le mouvements des yeux).
Une bonne prise de tête en perspective !