Et pour finir une version avec quelques améliorations et qui passe à la compilation:
#include <AccelStepper.h>
int INTERUPTEURPIN = 10;
int Pin_Pot = 0;
int Val_Pot;
int Speed;
bool Switch_ON = false; // variable utilisée pour détecter un basculement
unsigned long Val_Read;
unsigned long Old_Read;
const long Interval = 250; // interval de lecture valeur Potentiométre
const int MaxSpeed = 3000; // vitesse maximale du moteur
AccelStepper stepper(1, 4, 7); // TB6600 OFF OFF ON ON ON OFF
void setup()
{
Serial.begin(115200); //Initialisation de la communication avec la console
pinMode(INTERUPTEURPIN,INPUT);
digitalWrite(INTERUPTEURPIN, HIGH); //Pullup interne activé
stepper.setMaxSpeed(MaxSpeed);
stepper.setAcceleration(3000);
}
void loop()
{
if( digitalRead(INTERUPTEURPIN) == true ) { // si l'interrupteur moteur est sur "Rotation"
Val_Read = millis(); // lecture du temps pour comparaison
if ((Switch_ON == false) or (Val_Read - Old_Read >= Interval)) { // si l'interrupteur moteur vient juste d'être positionné sur "Rotation" ou si "Interval" est dépassé => Lecture du potentiomètre et
Val_Pot = analogRead(Pin_Pot);
Speed = map(Val_Pot,0,1023,0,MaxSpeed);
Serial.print("Valeur Pot : ");
Serial.println(Val_Pot); // affiche la valeur du potentiomètre
Serial.print("Vitesse : ");
Serial.println(Speed); // affiche la vitesse
stepper.setSpeed(Speed); // Assigne la consigne de vitesse
Old_Read = Val_Read; // mémorise le temps comme réference pour la prochaine itération
Switch_ON = true; // Mémorise la position de l'interrupteur du moteur
}
}
else { // si l'interrupteur moteur n'est pas sur rotation
if (Switch_ON == true) { // mais qu'il vient juste d'être basculé
stepper.setSpeed(0); // on stoppe la rotation du moteur
Switch_ON = false; // et on mémorise le nouvel état de l'interrupteur moteur
}
}
stepper.run(); // utilisation de la procedure stepper.run() à la place de stepper.runSpeed() pour inclure les accélérations/décélérations
}
A noter dans la documentation de la librairie une limitation à prendre en compte.
il est donc certain que l'utilisation d'une carte Uno ou équivalent en puissance limitera la vitesse du moteur. Mais vu la capacité de mémoire, il est de toute façon impossible de stocker un programme complexe.
@demandeinfos
La bibliothèque 'AccelStepper' possède de nombreuses procédures et propriétés qui seraient parfaites pour la gestion d'un déplacement sur un axe X/Y. Elle dispose, en plus de la gestion de l'accélération/décélération, d'une propriété qui 'compte' les pas, de procédures pour des déplacements en nombre de pas relatifs et absolus. Il serait vraiment dommage de ne pas l'intégrer dans ton projet car dans ce cas il te faudra réécrire des fonctions pour gérer les déplacements.
tu peux trouver sa documentation en anglais dans le répertoire 'projets/libraries/AccelStepper/extras/doc' si tu as fait une installation classique de l'IDE ARDUINO.