Je n'ai vu aucune opération mathématique. Tu parle peut être de la comparaison :
"if(currentMillis - previousMillis > interval) {...}"
qui contient des "caractère mathématiques"
ça sert à n'effectuer le contenu de la boucle que toutes les 1000 millisecondes (ou plutôt toutes les secondes!)
en français ça voudrait dire :
Si la variable currentMillis (cette variable contient une valeur qui lui provient d'une fonction "millis()" dont je ne vois pas le bout de code) auquel on soustrait la valeur de la variable "previousMillis" (qui vaut 0 au début du prog et prends ensuite la valeur de currentMillis toutes les 1000ms) est supérieur à la valeur de la variable "interval" (qui a été fixée à 1000 millisecondes), alors execute ce qui est entre les {} qui suivent.
Cette solution n'est à mon avis pas la meilleure car au bout d'un certain nombre de clignotements la variable currentMillice sera saturée (d'après moi celà arrivera après le 1073741ième clignotement puisque d'une variable de type long peut aller jusque 2 147 483 647, ce programme devrait donc planter un peu avant son 25ième jour de fonctionnement sans reset). A mon avis le mieux serait de réinitialiser les variables du compteur toutes les secondes plutôt que d'incrémenter previousMillis.. à moins de vouloir garder une trace en mémoire du temps écoulé.
je me demande quand même ou est cette fonction "millis()" qui doit gérer la tempo.
PS.. et pourquoi ne pas simplement utiliser le PWM de l'arduino ?
.. et pour ce qui est de sacader le mouvement du servo... va voir mon luxfinder, c'est justement ce qu'il fait.

Programme intelligent
Débuté par ashira, juin 16 2012 10:54
64 réponses à ce sujet
#63
Posté 24 juin 2012 - 02:58
J'utilise une boucle FOR pour effectuer un balayage (ici de 0° à 89° en avançant d'un degré à chaque tour de boucle et avec une temporisation entre chaque degré de 100ms)
Soit 90 itérations multipliées par une pause de 1/10ième de seconde... le servo doit effectuer un angle de 90° en neuf secondes. (et comme il fait 10 mouvements à la seconde, on ne vois même pas que ça avance par a coups)
j'ai utilisé des pauses pour émuler la fréquence, ce qui me permet de laisser au servomoteur le temps de rejoindre la position souhaitée et (dans le programme présenté sur ma page web) d'effectuer une prise de mesure à chaque pas.
for(pos = 0; pos < 90; pos += 1) // search for best vertical angle { myservo2.write(pos); // tell servo to go to position in variable 'pos' delay(100); // waits 100ms for the servo to reach the position }
Soit 90 itérations multipliées par une pause de 1/10ième de seconde... le servo doit effectuer un angle de 90° en neuf secondes. (et comme il fait 10 mouvements à la seconde, on ne vois même pas que ça avance par a coups)
j'ai utilisé des pauses pour émuler la fréquence, ce qui me permet de laisser au servomoteur le temps de rejoindre la position souhaitée et (dans le programme présenté sur ma page web) d'effectuer une prise de mesure à chaque pas.
Répondre à ce sujet

2 utilisateur(s) li(sen)t ce sujet
0 members, 2 guests, 0 anonymous users