#include <AccelStepper.h>
#define STEP_PIN 9 // Conecta el pin de paso (STEP) del A4988 al pin 3 de Arduino
#define DIR_PIN 8 // Conecta el pin de dirección (DIR) del A4988 al pin 6 de Arduino
//#define ENABLE_PIN 8 // Conecta el pin de habilitación (ENABLE) del A4988 al pin 8 de Arduino
#define LIMIT_SWITCH_PIN 11 // Conecta el interruptor de límite al pin 10 de Arduino
AccelStepper stepper(1, STEP_PIN, DIR_PIN); // Define un objeto stepper
boolean limitSwitchState = false;
int stepsAfterLimitSwitch = 50;
void setup() {
// pinMode(ENABLE_PIN, OUTPUT); // Establece el pin de habilitación como salida
// digitalWrite(ENABLE_PIN, LOW); // Habilita el controlador A4988
pinMode(LIMIT_SWITCH_PIN, INPUT_PULLUP); // Configura el pin del interruptor de límite como entrada con resistencia de pull-up
stepper.setMaxSpeed(1000); // Establece la velocidad máxima en pasos por segundo
stepper.setAcceleration(1000); // Establece la aceleración en pasos por segundo al cuadrado
}
void loop() {
// Verifica si el interruptor de límite ha cambiado de estado
boolean newLimitSwitchState = digitalRead(LIMIT_SWITCH_PIN) == LOW;
// Si el estado del interruptor de límite ha cambiado
if (newLimitSwitchState != limitSwitchState) {
// Cambia el sentido de la rotación del motor
stepper.setSpeed(-stepper.speed()); // Invierte la dirección actual del motor
limitSwitchState = newLimitSwitchState;
// Realiza 50 pasos en la nueva dirección
for (int i = 0; i < stepsAfterLimitSwitch; ++i) {
stepper.run();
delay(10);
}
// Detén el motor después de los pasos
stepper.stop();
while (stepper.isRunning()) {
delay(10);
}
}
// Gira en sentido horario con aceleración
stepper.moveTo(5000); // Posición a la que se moverá con aceleración
stepper.run();
// Asegúrate de no bloquear el programa con un bucle sin fin
delay(10);
}