Je vous contacte pour avoir un peu d'aide j'ai pour projet de devoir faire tourner un moteur pas a pas à 4 fils dans les deux sens et avec une vitesse de rotation donnée par le potar.
Voici le code :
#include <Stepper.h>
const int NombrePas=200;
const int RVar=A2;
const int pwmPhaseA=3;
const int dirPhaseA=12;
const int freinPhaseA=9;
const int intensitePhaseA=A0;
const int pwmPhaseB=11;
const int dirPhaseB=13;
const int freinPhaseB=8;
const int intensitePhaseB=A1;
int mesure=0;
int vitesse=0;
int vitesse0=0;
int vitesseMax=100;
Stepper stepper(NombrePas, 3, 12, 11, 13);
void setup() {
pinMode (pwmPhaseA, OUTPUT);
pinMode (dirPhaseA, OUTPUT);
pinMode (freinPhaseA, OUTPUT);
pinMode (pwmPhaseB, OUTPUT);
pinMode (dirPhaseB, OUTPUT);
pinMode (freinPhaseB, OUTPUT);
digitalWrite (pwmPhaseA, HIGH);
digitalWrite (dirPhaseA, LOW);
digitalWrite (freinPhaseA, LOW);
digitalWrite (pwmPhaseB, HIGH);
digitalWrite (dirPhaseB, LOW);
digitalWrite (freinPhaseB, LOW);
stepper.setSpeed(70);
}
void loop() {
mesure=analogRead(RVar);
vitesse=map(mesure,0,1023,-vitesseMax,vitesseMax);
if ( (vitesse!=vitesse0) && (abs(vitesse)>=1)) {
stepper.setSpeed(abs(vitesse));
vitesse0=vitesse;
}
if (vitesse>=1) stepper.step(1);
if (vitesse<=1) stepper.step(-1);
}
Voici quelques photos de mon montage :
Photo avec le branchement du moteur sur une arduino motor shield :
Sans chercher à comprendre plus en profondeur le code trois choses me hérisse le poil :
les noms de variables const en minuscule, une constante par convention est nommée en majuscule pour pouvoir être facilement différenciée d'une variable "normale"
(au passage ça te permettrait de voir que tu as des const qui manque ;))
les variables globales inutiles, dans ton code une floppé de variables devrait être locales, ce serait plus lisible (et les autres static pour vraiment bien faire)
les accolades, les espaces et les retours à la ligne ça ne coute pas bien cher et ça rend le code bien plus lisible
Sinon ce morceau :
if (ecartPas > 0) {
stepper.step(ecartPas);
indicePas0 = indicePas;
}
if (ecartPas < 0) {
stepper.step(ecartPas);
indicePas0 = indicePas;
}
Revient à faire ceci en réalité :
if (ecartPas != 0) {
stepper.step(ecartPas);
indicePas0 = indicePas;
}
Pour le reste du code je t'avouerai que je ne vois pas bien ce que tu veut faire exactement et ce que tu appelles "épouser parfaitement la vitesse d'exécution de mon mouvement".
skywodd:
Pour le reste du code je t'avouerai que je ne vois pas bien ce que tu veut faire exactement et ce que tu appelles "épouser parfaitement la vitesse d'exécution de mon mouvement".
Ouf je pensais que c'était mon week-end chargé qui me jouait des tours xD