Aller au contenu


Photo
- - - - -

Programme intelligent


64 réponses à ce sujet

#61 thermo_nono

thermo_nono

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 757 messages

Posté 24 juin 2012 - 01:06

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.

#62 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 282 messages
  • Gender:Male

Posté 24 juin 2012 - 01:58

Oui je parlais de cette comparaison. j'aivais compris le sens mais je me demandais si il n'y avait pas une autre façon de tout écrire plus syntaxique ?
Pour ton robot c'est exactement ce que je voudrai faire. Tu as émulé les fréquances toi meme avec des pauses ?

#63 thermo_nono

thermo_nono

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 757 messages

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)

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.

#64 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 282 messages
  • Gender:Male

Posté 24 juin 2012 - 08:42

D'accord merci, j'utiliserai cette technique pour les mouvements lents.

#65 buildrobot

buildrobot

    Membre occasionnel

  • Membres
  • Pip
  • 89 messages
  • Gender:Male
  • Interests:Robotique humanoïde, programmation arduino, musique

Posté 16 mars 2014 - 10:19

Slt,
Ou en est ton projet ? Je le trouve très intéressant ;)
buildrobot.



Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users