#define switch1 4
#define switch2 5
// Nema17 del módulo A
#define A4988_1_STEP 10
#define A4988_1_DIR 11
#define A4988_1_ENABLE 12
#define HORARIO LOW
#define ANTI_HORARIO HIGH
int stepCounter = 0; // Contador de pasos
bool motorAvanzando = true; // Para indicar si el motor avanza o regresa
void moverMotor(int dirPin, int stepPin, int steps, int direccion, int delayTime) {
desactivarSwitches(); // Desactiva switches antes de mover el motor
digitalWrite(dirPin, direccion);
for (int i = 0; i < steps; i++) {
digitalWrite(stepPin, HIGH);
delay(delayTime);
digitalWrite(stepPin, LOW);
delay(delayTime);
if (motorAvanzando) {
stepCounter++; // Incrementa el contador si avanza
} else {
stepCounter--; // Decrementa el contador si regresa
}
// Si llega a 300 pasos, activa el switch1 con un pequeño delay
if (stepCounter >= 300 && motorAvanzando) {
delay(500); // Pequeño delay para simular el lapso de tiempo
activarSwitch1(); // Activa el switch1
motorAvanzando = false; // Cambia la dirección para regresar
break;
}
// Si llega a 0 pasos al regresar, activa el switch2 con un pequeño delay
if (stepCounter <= 0 && !motorAvanzando) {
delay(500); // Pequeño delay para simular el lapso de tiempo
activarSwitch2(); // Activa el switch2
motorAvanzando = true; // Cambia la dirección para avanzar
break;
}
}
}
void activarSwitch1() {
// Simula la activación del switch1 al llegar a 300 pasos
Serial.println("Activando switch1 en 300 pasos");
digitalWrite(switch1, LOW); // Activa el switch1
digitalWrite(switch2, HIGH); // Asegúrate de que el switch2 esté desactivado
}
void activarSwitch2() {
// Simula la activación del switch2 al regresar a 0 pasos
Serial.println("Activando switch2 en 0 pasos");
digitalWrite(switch1, HIGH); // Asegúrate de que el switch1 esté desactivado
digitalWrite(switch2, LOW); // Activa el switch2
}
void desactivarSwitches() {
// Desactiva ambos switches durante el movimiento
digitalWrite(switch1, HIGH);
digitalWrite(switch2, HIGH);
}
uint8_t caso = 0;
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32-S3!");
pinMode(switch1, OUTPUT); // Cambia a OUTPUT para controlar los switches
pinMode(switch2, OUTPUT); // Cambia a OUTPUT para controlar los switches
pinMode(A4988_1_DIR, OUTPUT);
pinMode(A4988_1_STEP, OUTPUT);
pinMode(A4988_1_ENABLE, OUTPUT);
desactivarSwitches(); // Inicialmente, ambos switches desactivados
}
void loop() {
if (motorAvanzando) {
moverMotor(A4988_1_DIR, A4988_1_STEP, 300, HORARIO, 10); // Avanza 300 pasos
} else {
moverMotor(A4988_1_DIR, A4988_1_STEP, 300, ANTI_HORARIO, 10); // Regresa 300 pasos
}
delay(1000); // Tiempo de espera entre movimientos
}