Tu es sur la bonne voie avec ton premier.
fvitesse() retourne une valeur qui correspond à un angle. Elle porte mal son nom. (je chipote mais j'ai cru que tu mettais une vitesse dans setPWM)
A un moment, il faut bien appeler time.time() pour savoir combien de temps s'est écoulé entre 2 tours de la boucle.
Et j'ai du t'induire en erreur avec mon t=0. Dans ce cas, il faut mémoriser time.time() au démarrage du mouvement. On va appeler cette variable "timeDebut" pour lever l'ambiguïté.
degres = 0
timeDebut = time.time()
Fais-toi une fonction map générique def map(...) :
En entrée de map tu y mets du temps et en sortie un angle. map te donne une valeur proportionnelle de ton angle fonction du temps qui s'est écoulé.
Dans ta boucle, tu reprends la valeur de time.time() et tu la compare à timeDebut pour savoir à combien de temps on est du début.
delai = time.time() - timeDebut
Et tu donne ce delai à map (pas un angle).
Je corrige ce que je dis au dessus :
Pour faire ça,
Tu place ton servo à 0° et tu initialise une variable t =.time.time()
Tu boucle comme ceci :
- La position de ton servo en degrés à l'instant est map(<temps depuis t0>, 0s, 10s, 0°, 100°)
- Tu sors de la boucle quand la position est (supérieur ou) égale à ta position d'arrivée (pour gérer le pb des pouillèmes après la virgule)
Dernière remarque, tu es sur raspberry, pas un microcontroleur. Mets toujours des petits time.sleep() dans ta boucle pour laisser ton processeur respirer un peu. Il n'a pas que ton programme à exécuter
Même si il a 4 coeurs, c'est mal.