Robin2:
Please just add your .ino file as an attachment if the code is too long to include in a Post. And in your next Reply. People rarely bother to re-read earlier posts.
It is generally easier to help if you write a short program that illustrates the problem and leaves out other irrelevant stuff.
…R
Thanks for the advice. I cut down the program enough now to fit below, and to do only the two functions discussed in the original post (Step-x1 or Step-x4).
Note that the x4 runs through all twelve motors (in groups of 4) while the x1 just runs on the first motor.
The focus here is that when running in groups of 4, I’m not getting the same acceleration response from my .run() loop.
Much thanks for all the patience.
#include <AccelStepper.h>
#include<Wire.h>
#define FULLSTEP 4
#define HALFSTEP 8
#define motor1_Pin2 2
#define motor1_Pin1 3
#define motor1_Pin4 4
#define motor1_Pin3 5
#define motor2_Pin2 6
#define motor2_Pin1 7
#define motor2_Pin4 8
#define motor2_Pin3 9
#define motor3_Pin1 10
#define motor3_Pin2 11
#define motor3_Pin3 12
#define motor3_Pin4 13
#define motor4_Pin1 14
#define motor4_Pin2 15
#define motor4_Pin3 16
#define motor4_Pin4 17
#define motor5_Pin1 47
#define motor5_Pin2 49
#define motor5_Pin3 51
#define motor5_Pin4 53
#define motor6_Pin1 22
#define motor6_Pin2 24
#define motor6_Pin3 26
#define motor6_Pin4 28
#define motor7_Pin1 23
#define motor7_Pin2 25
#define motor7_Pin3 27
#define motor7_Pin4 29
#define motor8_Pin1 30
#define motor8_Pin2 32
#define motor8_Pin3 34
#define motor8_Pin4 36
#define motor9_Pin1 31
#define motor9_Pin2 33
#define motor9_Pin3 35
#define motor9_Pin4 37
#define motor10_Pin1 38
#define motor10_Pin2 40
#define motor10_Pin3 42
#define motor10_Pin4 44
#define motor11_Pin1 39
#define motor11_Pin2 41
#define motor11_Pin3 43
#define motor11_Pin4 45
#define motor12_Pin2 46
#define motor12_Pin1 48
#define motor12_Pin4 50
#define motor12_Pin3 52
char user_input;
int user_input2;
int user_input3;
int x;
int y;
int z;
int StepperNumber;
const int NumberOfSteppers = 12;
int MaxSpeed = 2500;
int Accel = 1300;
int Speed = 10000;
int RunOut = -2048*1.8;
long MoveTo;
int SlaveGo = 1;
int MasterReceive;
AccelStepper stepper1(HALFSTEP, motor1_Pin1, motor1_Pin3, motor1_Pin2, motor1_Pin4);
AccelStepper stepper2(HALFSTEP, motor2_Pin1, motor2_Pin3, motor2_Pin2, motor2_Pin4);
AccelStepper stepper3(HALFSTEP, motor3_Pin1, motor3_Pin3, motor3_Pin2, motor3_Pin4);
AccelStepper stepper4(HALFSTEP, motor4_Pin1, motor4_Pin3, motor4_Pin2, motor4_Pin4);
AccelStepper stepper5(HALFSTEP, motor5_Pin1, motor5_Pin3, motor5_Pin2, motor5_Pin4);
AccelStepper stepper6(HALFSTEP, motor6_Pin1, motor6_Pin3, motor6_Pin2, motor6_Pin4);
AccelStepper stepper7(HALFSTEP, motor7_Pin1, motor7_Pin3, motor7_Pin2, motor7_Pin4);
AccelStepper stepper8(HALFSTEP, motor8_Pin1, motor8_Pin3, motor8_Pin2, motor8_Pin4);
AccelStepper stepper9(HALFSTEP, motor9_Pin1, motor9_Pin3, motor9_Pin2, motor9_Pin4);
AccelStepper stepper10(HALFSTEP, motor10_Pin1, motor10_Pin3, motor10_Pin2, motor10_Pin4);
AccelStepper stepper11(HALFSTEP, motor11_Pin1, motor11_Pin3, motor11_Pin2, motor11_Pin4);
AccelStepper stepper12(HALFSTEP, motor12_Pin1, motor12_Pin3, motor12_Pin2, motor12_Pin4);
AccelStepper* stepperPtrArray[NumberOfSteppers]={&stepper1,&stepper2,&stepper3,&stepper4,&stepper5,
&stepper6,&stepper7,&stepper8,&stepper9,&stepper10,&stepper11,&stepper12};
void setup() {
Serial.println();
Serial.begin(9600); //Open Serial connection for debugging
Serial.println("Begin motor control");
Serial.println();
Serial.println("Enter number for control option:");
Serial.println("1. Move single motor");
Serial.println("2. Move 4x motor");
Serial.println();
stepper1.setMaxSpeed(MaxSpeed);stepper1.setAcceleration(Accel);stepper1.setSpeed(Speed);
stepper2.setMaxSpeed(MaxSpeed);stepper2.setAcceleration(Accel);stepper2.setSpeed(Speed);
stepper3.setMaxSpeed(MaxSpeed);stepper3.setAcceleration(Accel);stepper3.setSpeed(Speed);
stepper4.setMaxSpeed(MaxSpeed);stepper4.setAcceleration(Accel);stepper4.setSpeed(Speed);
stepper5.setMaxSpeed(MaxSpeed);stepper5.setAcceleration(Accel);stepper5.setSpeed(Speed);
stepper6.setMaxSpeed(MaxSpeed);stepper6.setAcceleration(Accel);stepper6.setSpeed(Speed);
stepper7.setMaxSpeed(MaxSpeed);stepper7.setAcceleration(Accel);stepper7.setSpeed(Speed);
stepper8.setMaxSpeed(MaxSpeed);stepper8.setAcceleration(Accel);stepper8.setSpeed(Speed);
stepper9.setMaxSpeed(MaxSpeed);stepper9.setAcceleration(Accel);stepper9.setSpeed(Speed);
stepper10.setMaxSpeed(MaxSpeed);stepper10.setAcceleration(Accel);stepper10.setSpeed(Speed);
stepper11.setMaxSpeed(MaxSpeed);stepper11.setAcceleration(Accel);stepper11.setSpeed(Speed);
stepper12.setMaxSpeed(MaxSpeed);stepper12.setAcceleration(Accel);stepper12.setSpeed(Speed);
}
void loop() {
while(Serial.available()){
user_input = Serial.read(); //Read user input and trigger appropriate function
if (user_input =='1')
{
Stepx1();
}
else if(user_input =='2')
{
Stepx4();
}
else
{
Serial.println("Invalid option entered.");
}
}
}
void Stepx1()
{
float STArray;
float FTArray;
StepperNumber = 0;
stepperPtrArray[StepperNumber]->setCurrentPosition(0);
stepperPtrArray[StepperNumber]->moveTo(RunOut);
STArray=millis();
while (abs(stepperPtrArray[StepperNumber]->distanceToGo()) > 0)
{
stepperPtrArray[StepperNumber]->run();
}
FTArray=millis();
stepperPtrArray[StepperNumber]->disableOutputs();
Serial.println(FTArray-STArray);
}
void Stepx4()
{
int StepperGroups[][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}};
int ArrayRow = (sizeof(StepperGroups)/10)%10 + 1;
int ArrayCol = (sizeof(StepperGroups))%10;
float STArray[12];
float FTArray[12];
Serial.println("Moving all steppers forward");
for (StepperNumber = 0; StepperNumber < NumberOfSteppers; StepperNumber++)
{
stepperPtrArray[StepperNumber]->setCurrentPosition(0);
stepperPtrArray[StepperNumber]->moveTo(RunOut);
}
for (x=0; x<ArrayRow; x++)
{
STArray[x]=millis();
while (abs(stepperPtrArray[(StepperGroups[x][1])]->distanceToGo()) > 0)
{
for (z=0; z<ArrayCol; z++)
{
stepperPtrArray[(StepperGroups[x][z])]->run();
}
}
FTArray[x]=millis();
DisableOutputs();
}
for(int i = 0; i < 3; i++)
{
Serial.print("Motor");Serial.print(i);Serial.print(":");
Serial.println(FTArray[i]-STArray[i]);
}
}
void DisableOutputs()
{
for (StepperNumber = 0; StepperNumber < NumberOfSteppers; StepperNumber++)
{
stepperPtrArray[StepperNumber]->disableOutputs();
}
}