#include <AccelStepper.h>
const byte runButton = 8;
const byte startButton = 9;
const byte stepPin1 = 5;
const byte dirPin1 = 6;
const byte stepPin2 = 3;
const byte dirPin2 = 4;
const byte motorInterfaceType = AccelStepper::DRIVER ; // A4988
AccelStepper stepper1 = AccelStepper(motorInterfaceType, stepPin1, dirPin1);
AccelStepper stepper2 = AccelStepper(motorInterfaceType, stepPin2, dirPin2);
#define MICROSTEP 4 // 1/4 di passo
#define TARGET 200*MICROSTEP // Numero di step per ciclo
int posTarget, oldPos;
void setup() {
pinMode(startButton, INPUT_PULLUP);
pinMode(runButton, INPUT_PULLUP);
Serial.begin(115200);
stepper1.setMaxSpeed(1000);
stepper1.setAcceleration(5000);
stepper2.setMaxSpeed(1000);
stepper2.setAcceleration(5000);
// Recupero lo scatto che fa all'avvio wokwi
// stepper1.move(8);
// stepper1.runToPosition();
// stepper1.setCurrentPosition(0);
// stepper2.move(8);
// stepper2.runToPosition();
// stepper2.setCurrentPosition(0);
}
void loop() {
// Cambio posizione quando il pulsante viene premuto e lo stepper ha completato il movimento
if (digitalRead(startButton) == 0 && stepper1.distanceToGo() == 0) {
posTarget += TARGET;
delay(50);
}
// Nuova posizione
if (posTarget != oldPos) {
oldPos = posTarget;
Serial.print("Move to position ");
Serial.println(posTarget);
// Imposta la nuova posizione target
stepper1.moveTo(posTarget);
// stepper2.moveTo(-posTarget);
}
// Fai ruotare il motore fintanto che non raggiunge la posizione target
if (stepper1.distanceToGo() != 0) {
stepper1.run();
}
if (digitalRead(runButton) == 0) {
stepper2.moveTo(stepper2.currentPosition() + 10);
stepper2.run();
}
}