Bonjour à tous ,
depuis quelques temps je bute sur un soucis avec 2 nema 23 et la bibliothèque AccelStepper :
je voudrais piloter ces 2 moteurs indépendamment ( avec des valeurs venant de commande DMX )
sur le principe tt ce passe correctement , au niveau de l'initialisation du point Home ( ref ) et de la rotation de chaque moteur en fonction des valeurs de commande reçu
Cependant , quand je veux agir sur les moteurs en même temps , ils perdent de la vitesse , il y a une modification de là fluidité des mouvements !
Pourtant j'ai volontairement utilisé la librairie AccelStepper avec la fonction Run , qui normalement n'est pas bloquante
avez vous une idée , sur le paramètre qui ''merdouille'' ![]()
merci à vous
cordialement
le code à ce jour
#include "AccelStepper.h"
#include <DMXSerial.h>
AccelStepper stepper(1,2,3);
AccelStepper stepperPLA(1,5,4);
int ctr = 0 ;
// moteur plateau
#define pinStepB 5 // Signal de PAS (avancement) PUL +
#define pinDirB 4 // Direction DIR +
int TourneB ;
int Butemin = A0 ;
int Butemax = A1 ;
void setup() {
pinMode( pinDirB , OUTPUT );
pinMode( pinStepB , OUTPUT );
pinMode( Butemin , INPUT_PULLUP );
pinMode(Butemax,INPUT_PULLUP);
////////////procedure HOME ////////////////
while ( digitalRead(Butemin) == HIGH )
{
digitalWrite( pinDirB , LOW); // Direction avant // sens anti horaire
digitalWrite( pinStepB, HIGH );
delayMicroseconds (700 ) ;
digitalWrite( pinStepB, LOW );
delayMicroseconds ( 700 ) ;
}
delay ( 100 ) ;
for(int Tour = 0; Tour <=300; Tour += 1)
{
digitalWrite( pinDirB , HIGH);
digitalWrite( pinStepB, HIGH );
delayMicroseconds (700 ) ;
digitalWrite( pinStepB, LOW );
delayMicroseconds ( 700 ) ;
}
/////////////////////////////////////////
DMXSerial.init(DMXReceiver);
DMXSerial.write(1, 0);
DMXSerial.write(2, 0);
}
void loop() {
unsigned long lastPacket = DMXSerial.noDataSince();
if (lastPacket < 2000) { // valeur origine 5000
ctr = DMXSerial.read(1); // rotation Axe
TourneB = DMXSerial.read(2); // plateau
}
///////////////////////////////////////////
if ( ctr > 127 ) // rotation de l'axe
{
stepper.setMaxSpeed(4000);
stepper.setAcceleration(100);
stepper.move(9000);
stepper.run();
}
if ( ctr < 127 ) // OFF rotation axe
{
stepper.setMaxSpeed(4000);
stepper.setAcceleration(200);
stepper.move(0);
stepper.run();
}
////////////////Monté et déscente du plateau //////////////////
stepperPLA.setMaxSpeed(800);
stepperPLA.setAcceleration(2000);
stepperPLA.moveTo(TourneB*36);
stepperPLA.run();
/////////////////////////
}