#include <AccelStepper.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define STEP_PIN 3 // Conecta el pin de paso (STEP) del A4988 al pin 3 de Arduino
#define DIR_PIN 6 // 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 STEP_PIN_X 2 // Conecta el pin de paso (STEP) del A4988 al pin 2 de Arduino para el eje X
#define DIR_PIN_X 5 // Conecta el pin de dirección (DIR) del A4988 al pin 5 de Arduino para el eje X
#define LIMIT_SWITCH_PIN 11
// Conecta el interruptor de límite al pin A3 de Arduino
#define BOTON_PIN 12 // Conecta el botón al pin 4 de Arduino
AccelStepper stepperY(1, STEP_PIN, DIR_PIN); // Define un objeto stepper para el eje Y
AccelStepper stepperX(1, STEP_PIN_X, DIR_PIN_X); // Define un objeto stepper para el eje X
boolean limitSwitchState = false;
int stepsAfterLimitSwitch = 50;
void setup() {
lcd.init();
lcd.backlight();
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
pinMode(BOTON_PIN, INPUT_PULLUP);
stepperY.setMaxSpeed(1000); // Establece la velocidad máxima en pasos por segundo
stepperY.setAcceleration(1000); // Establece la aceleración en pasos por segundo al cuadrado
stepperX.setMaxSpeed(1000); // Establece la velocidad máxima en pasos por segundo para el eje X
stepperX.setAcceleration(1000); // Establece la aceleración en pasos por segundo al cuadrado para el eje X
}
void loop() {
homing();
}
void homing() {
lcd1();
boolean newLimitSwitchState = digitalRead(LIMIT_SWITCH_PIN) == HIGH;
if (newLimitSwitchState != limitSwitchState)
{
stepperY.setSpeed(-stepperY.speed());
limitSwitchState = newLimitSwitchState;
for (int i = 0; i < stepsAfterLimitSwitch; ++i) {
stepperY.run();
delay(5);
}
stepperY.stop();
while (stepperY.isRunning()) {
//delay(1);
lcd2();
}
}
stepperY.setMaxSpeed(1000); // Establece la velocidad máxima en pasos por segundo
stepperY.setAcceleration(1000); // Establece la aceleración en pasos por segundo al cuadrado
stepperY.moveTo(5000);
stepperY.run();
}
void lcd1() {
lcd.setCursor(4,0);
lcd.print("Looking");
lcd.setCursor(5,1);
lcd.print("Center");
}
void lcd2() {
lcd.setCursor(0, 0);
lcd.print(" Centered ");
lcd.setCursor(0, 1);
lcd.print(" ");
delay(1000);
Proceso();
}
void Proceso() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Procesando ");
lcd.setCursor(0, 1);
lcd.print(" mierda ");
delay(1000);
lcd.setCursor(0, 0);
lcd.print(" ");
//reset homing()--------------------------------------------------------
stepperY.setCurrentPosition(0); // Resetea la posición del motor
limitSwitchState = true; // Resetea el estado del interruptor de límite
}