#include <AccelStepper.h>

// Define los pines de STEP, DIR y ENABLE del driver A4988 
// (MOTOR 1)
#define DIR_PIN1 2
#define STEP_PIN1 4
#define ENABLE_PIN1 5 // Puede estar conectado directamente a GND si se quiere mantener habilitado siempre
// (MOTOR 2)
#define DIR_PIN2 12
#define STEP_PIN2 13
#define ENABLE_PIN2 14 // Puede estar conectado directamente a GND si se quiere mantener habilitado siempre
const int velocidadMotor = 3000;
const int acceleracionMotor = 1000;

//Movimiento en Pasos
//(MOTOR 1)
const int pasosAvanceMotor1 = 400;
const int pasosRetrocesoMotor1 = -200;

//(MOTOR 2)
const int pasosAvanceMotor2 = 600;
const int pasosRetrocesoMotor2 = -200;

// Tiempo de espera entre movimientos
const int tiempoDeEspera = 100;


// Crea una instancia de AccelStepper
// (MOTOR 1)
AccelStepper stepper1(AccelStepper::DRIVER, STEP_PIN1, DIR_PIN1);
// (MOTOR 2)
AccelStepper stepper2(AccelStepper::DRIVER, STEP_PIN2, DIR_PIN2);

void setup() {
  // Establece la velocidad máxima y la aceleración del motor (puedes ajustar estos valores según tus necesidades)
  
  //(MOTOR 1)
  stepper1.setMaxSpeed(velocidadMotor); // Velocidad máxima en pasos por segundo
  stepper1.setAcceleration(acceleracionMotor); // Aceleración en pasos por segundo al cuadrado
   //(MOTOR 2)
  stepper2.setMaxSpeed(velocidadMotor); // Velocidad máxima en pasos por segundo
  stepper2.setAcceleration(acceleracionMotor); // Aceleración en pasos por segundo al cuadrado



  // Configura el pin ENABLE como salida

  //(MOTOR 1)
  pinMode(ENABLE_PIN1, OUTPUT);
  digitalWrite(ENABLE_PIN1, LOW); // Habilita el driver (ajusta a HIGH si lo conectaste a VCC en lugar de GND)
  //(MOTOR 2)
  pinMode(ENABLE_PIN2, OUTPUT);
  digitalWrite(ENABLE_PIN2, LOW); // Habilita el driver (ajusta a HIGH si lo conectaste a VCC en lugar de GND)


}

void loop() {
  // Gira el motor en un sentido durante 2 segundos
  
  //(MOTOR 1)
  // Avance
  stepper1.setSpeed(velocidadMotor); // Velocidad en pasos por segundo (puedes ajustarla)
  stepper1.move(pasosAvanceMotor1); // Número de pasos a mover
  stepper1.runToPosition(); // Espera hasta que termine el movimiento

  delay(tiempoDeEspera); // Espera 1 segundo

  // Gira el motor en el sentido opuesto durante 2 segundos
  //Retroceso
  stepper1.setSpeed(velocidadMotor*-1); // Velocidad en pasos por segundo (puedes ajustarla)
  stepper1.move(pasosRetrocesoMotor1); // Número de pasos a mover (usamos un valor negativo para el sentido opuesto)
  stepper1.runToPosition(); // Espera hasta que termine el movimiento

  delay(tiempoDeEspera); // Espera 1 segundo

  //(MOTOR 2)
  // Avance
  stepper2.setSpeed(velocidadMotor); // Velocidad en pasos por segundo (puedes ajustarla)
  stepper2.move(pasosAvanceMotor2); // Número de pasos a mover
  stepper2.runToPosition(); // Espera hasta que termine el movimiento

  delay(tiempoDeEspera); // Espera 1 segundo

  // Gira el motor en el sentido opuesto durante 2 segundos
  //Retroceso
  stepper2.setSpeed(velocidadMotor*-1); // Velocidad en pasos por segundo (puedes ajustarla)
  stepper2.move(pasosRetrocesoMotor2); // Número de pasos a mover (usamos un valor negativo para el sentido opuesto)
  stepper2.runToPosition(); // Espera hasta que termine el movimiento

  delay(tiempoDeEspera); // Espera 1 segundo

}


/*

const int DIR = 2;
const int STEP = 4;
const int  steps_per_rev = 100;
const int timepoPaso = 1000;

void setup()
{
  Serial.begin(115200);
  pinMode(STEP, OUTPUT);
  pinMode(DIR, OUTPUT);
}
void loop()
{
  digitalWrite(DIR, HIGH);
  Serial.println("Girando en sentido horario");
  for(int j = 0; j<=3; j++)
  {
     for(int i = 0; i<steps_per_rev; i++)
     {
      digitalWrite(STEP, HIGH);
      delayMicroseconds(timepoPaso);
      digitalWrite(STEP, LOW);
      delayMicroseconds(timepoPaso);
     }
  }
  delay(1000); 
  
  digitalWrite(DIR, LOW);
  Serial.println("Girando en sentido anti horario");

  for(int i = 0; i<steps_per_rev; i++)
  {
    digitalWrite(STEP, HIGH);
    delayMicroseconds(timepoPaso);
    digitalWrite(STEP, LOW);
    delayMicroseconds(timepoPaso);
  }
  delay(1000);
}
*/
A4988
A4988