Sens incrémentation AccelStepper

Question sur déplacement moteur...
si je fais cela le moteur va de gauche a droite du point 1000 au point 2000

 PosY = 1000;
  StepperY.moveTo(2000);
  while (StepperY.isRunning() > 0) {
    StepperY.run();}

Si ensuite je fais cela :

 StepperY.moveTo(0);
  while (StepperY.isRunning() > 0) {
    StepperY.run();}

Il va se deplacer de Droite a gauche pour atteindre la position 0

Ma question est comment faire pour que la position 0 soit a droite mais qu'elle s'incrémente de facon positive? et non pas aller a -1000

Ca me parait stupide comme question mais je beugue

Salut!

je tente une approche intuitive:
les valeurs de 0 à 2000, elles sont imposées par la bibliothèque que tu utilises pour le stepper?
Si c'est le cas, je t'invite à respecter le domaine de valeur qu'elle attend, sinon tu n'auras pas le résultat attendu.
En revanche, tu peux utiliser la valeur que tu souhaites dans ton code (par exemple reçue d'un periphérique extérieur, ou issue d'un calcul), passer par une étape de conversion, qui elle donnera une valeur conforme à ce que la bibliothèque attend et envoyer cette valeur comme commande dans moveTo();

une autre version un peu plus "manuelle" (si j'ai bien compris ta question) serait de travailler uniquement avec des valeurs positives dans ton code, mais d'être capable de passer en négatif (x = - x) quand tu sais que tu veux un déplacement vers la droite.
Note que ça revient un peu au même, c'est à dire que tu joues avec les valeurs que tu veux, mais à la fin, il faudra respecter le protocole de la bibliothèque.

Une dernière option est bien sur de te passer de la bibliothèque et coder toi même le fonctionnement de ton stepper. Sans doute long et compliqué (selon ta motivation et ton expérience), mais quelle satisfaction quand ça marche!

Bonsoir Shodan47

Avec la bibliothèque AccelStepper, il y a la fonction setPinsInverted(), qui permet, entre autres, d'inverser le sens de rotation.

Cordialement
jpbbricole

merci @jpbbricole je vais regarder cela

bonjour @GrandPete les valeurs 0 a 2000 ne sont qu'un exemple, les axes en micropas peuvent avoir plusieurs dizaine de milliers de pas.
Toutes les valeurs sont dans des variables et s'incrémente ou se décrémente au fil des actions et c'est beaucoup plus simple et lisible de ne pas utiliser de valeur négative, et de définir les butées du soft a 0 a 5mm des fin de course.
Si la prise d'origine sur le Y est lorsque la table est contre le Z et donc a ce moment la a 0 dans le problème que je décris, je vais aller de 0 a -20 000 .... dans l'absolu je peux vivre avec ca :rofl: mais les operations sont plus simple sur des entiers

donc dans une définition moteur comme celle ci :

AccelStepperX (1,StepPinX,DirPinX);
// if faudrait utiliser :
setPinsInverted (false,false,true) 

// ?

ou inverser deux fils physiquement sur une paire?

Par défaut, c'est:

void AccelStepper::setPinsInverted	(	bool 	directionInvert = false,
bool 	stepInvert = false,
bool 	enableInvert = false 
)	

donc il faut écrire:

setPinsInverted (true,false,false)

Avec false,false,true tu inverses le signal ENABLE.

Je trouve la solution setPinsInverted plus "élégante" :wink:

Cordialement
jpbbricole

Super merci pour l'information, je pensais que les False ou True étaient dans le même sens que sur le driver.

Pas "Il faut", mais "on peut". Un informaticien écrirait:
setPinsInverted (true);
seulement.

Bonsoit vileroi

Oui, un informaticien, mais n'en étant pas un, je préfère l'option à 3 paramètres. En écrivant
setPinsInverted (true, false, false);le prochain amateur qui passe se rendra compte qu'il y a 3 possibilités avec setPinsInverted, et ce d'autant plus si c'est bien documenté, c'est plus instructif, et surtout "ça ne mange pas de pain" :wink:.

Cordialement
jpbbricole

1 Like

C'est vrai que ce ne sont que de "vrais" informaticien qui utilisent Arduino.....

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.