#include <AccelStepper.h>

// Definición de pines para el motor X
#define X_STEP_PIN 5
#define X_DIR_PIN 4

// Definición de pines para el motor Y
#define Y_STEP_PIN 7
#define Y_DIR_PIN 6

// Número total de pulsos
#define TOTAL_PULSES 10000

// Crear instancias de AccelStepper para los motores
AccelStepper stepperX(AccelStepper::FULL4WIRE, X_STEP_PIN, X_DIR_PIN);
AccelStepper stepperY(AccelStepper::FULL4WIRE, Y_STEP_PIN, Y_DIR_PIN);

void setup() {
  // Inicializar comunicación serial
  Serial.begin(9600);

  // Configurar los pines de los motores como salidas
  pinMode(X_STEP_PIN, OUTPUT);
  pinMode(X_DIR_PIN, OUTPUT);
  pinMode(Y_STEP_PIN, OUTPUT);
  pinMode(Y_DIR_PIN, OUTPUT);

  // Configurar la velocidad máxima y la aceleración de los motores
  stepperX.setMaxSpeed(100);  // Máxima velocidad para el motor X
  stepperY.setMaxSpeed(100);  // Máxima velocidad para el motor Y
}

void loop() {
  // Mover el motor X hacia adelante
  for (int i = 0; i < TOTAL_PULSES; ++i) {
    stepperX.setSpeed(100);  // Establecer la velocidad
    stepperX.runSpeed();    // Ejecutar el motor
    delay(1);

    // Enviar posición a la consola cada 10 pulsos
    if (i % 10 == 0) {
      Serial.print("X: ");
      Serial.println(stepperX.currentPosition());
    }
  }

  // Mover el motor X hacia atrás
  for (int i = TOTAL_PULSES; i > 0; --i) {
    stepperX.setSpeed(-100);  // Establecer la velocidad en reversa
    stepperX.runSpeed();     // Ejecutar el motor
    delay(1);

    // Enviar posición a la consola cada 10 pulsos
    if (i % 10 == 0) {
      Serial.print("X: ");
      Serial.println(stepperX.currentPosition());
    }
  }

  // Mover el motor Y hacia adelante
  for (int i = 0; i < TOTAL_PULSES; ++i) {
    stepperY.setSpeed(100);  // Establecer la velocidad
    stepperY.runSpeed();    // Ejecutar el motor
    delay(1);

    // Enviar posición a la consola cada 10 pulsos
    if (i % 10 == 0) {
      Serial.print("Y: ");
      Serial.println(stepperY.currentPosition());
    }
  }

  // Mover el motor Y hacia atrás
  for (int i = TOTAL_PULSES; i > 0; --i) {
    stepperY.setSpeed(-100);  // Establecer la velocidad en reversa
    stepperY.runSpeed();     // Ejecutar el motor
    delay(1);

    // Enviar posición a la consola cada 10 pulsos
    if (i % 10 == 0) {
      Serial.print("Y: ");
      Serial.println(stepperY.currentPosition());
    }
  }

  // Reiniciar posición de los motores a 0
  stepperX.setCurrentPosition(0);
  stepperY.setCurrentPosition(0);
}
A4988
A4988