#include <AccelStepper.h>
const int stepsPerRevolution1 = 1600; // Steps for Stepper 1 and Stepper 2
const int stepsPerRevolution2 = 1600; // Steps for Stepper 3 and Stepper 4
const int motorDelay = 3000; // 3-second delay
AccelStepper stepper1(AccelStepper::FULL4WIRE, 6, 7, 8, 9);
AccelStepper stepper2(AccelStepper::FULL4WIRE, 10, 11, 12, 13);
AccelStepper stepper3(AccelStepper::HALF4WIRE, 3, 4);
AccelStepper stepper4(AccelStepper::HALF4WIRE, 1, 2);
unsigned long lastMotorMoveTime = 0;
int currentState = 0;
void setup() {
// Set maximum speed and acceleration for Stepper 3
stepper3.setMaxSpeed(65000); // Speed for 3-second revolution
stepper3.setAcceleration(65000);
stepper1.setMaxSpeed(1000);
stepper1.setAcceleration(500);
stepper2.setMaxSpeed(1000);
stepper2.setAcceleration(500);
// Set maximum speed and acceleration for Stepper 4
stepper4.setMaxSpeed(65000); // Speed for 3-second revolution
stepper4.setAcceleration(65000);
Serial.begin(9600);
// Set Stepper 3 to make a complete revolution
stepper3.move(stepsPerRevolution2);
// Set initial positions for Stepper 1, Stepper 2, and Stepper 4
stepper1.move(stepsPerRevolution1);
stepper2.move(stepsPerRevolution1);
stepper4.move(stepsPerRevolution2);
}
void loop() {
unsigned long currentTime = millis();
switch (currentState) {
case 0: // Stepper 3
if (stepper3.distanceToGo() == 0) {
stepper3.moveTo(-stepper3.currentPosition());
}
stepper3.runSpeed();
// Transition to the next state after 3 seconds
if (currentTime - lastMotorMoveTime >= motorDelay) {
lastMotorMoveTime = currentTime;
currentState = 1;
}
break;
case 1: // Stepper 1 and Stepper 2 run simultaneously
if (stepper1.distanceToGo() == 0) {
stepper1.moveTo(-stepper1.currentPosition());
}
stepper1.runSpeed();
if (stepper2.distanceToGo() == 0) {
stepper2.moveTo(-stepper2.currentPosition());
}
stepper2.runSpeed();
// Transition to the next state after 3 seconds
if (currentTime - lastMotorMoveTime >= motorDelay) {
lastMotorMoveTime = currentTime;
currentState = 2;
}
break;
case 2: // Stepper 4
if (stepper4.distanceToGo() == 0) {
stepper4.moveTo(-stepper4.currentPosition());
}
stepper4.runSpeed();
// Transition to the first state after 3 seconds
if (currentTime - lastMotorMoveTime >= motorDelay) {
lastMotorMoveTime = currentTime;
currentState = 0;
}
break;
}
}