#include "AsyncStepper.hpp"
const int BPXR=13;//Definir los pines de pulsadores
const int BPXL=12;
const int BPYU=27;
const int BPYD=14;
int EstAntXR=HIGH;//Definir y almacenar estado anterior de los pulsadores
int EstAntXL=HIGH;
int EstAntYU=HIGH;
int EstAntYD=HIGH;
const int PDIRMX=2;//Definir los pines de los motores
const int PPASMX=4;
const int PDIRMY=5;
const int PPASMY=18;
const int PASOS = 200;//Definir motores
AsyncStepper MOTORX(PASOS, PDIRMX, PPASMX);
AsyncStepper MOTORY(PASOS, PDIRMY, PPASMY);
void setup()
{
Serial.begin(115200);
pinMode(BPXR, INPUT_PULLUP);//Definir los pines de los pulsadores en alto
pinMode(BPXL, INPUT_PULLUP);
pinMode(BPYU, INPUT_PULLUP);
pinMode(BPYD, INPUT_PULLUP);
MOTORX.SetSpeedRpm(50);//Definir velocidad de motores
MOTORY.SetSpeedRpm(50);
}
void loop()
{
int EstXR=digitalRead(BPXR);//Leer el estado actual de los pulsadores
int EstXL=digitalRead(BPXL);
int EstYU=digitalRead(BPYU);
int EstYD=digitalRead(BPYD);
if(EstXR == LOW && EstAntXR == HIGH){//Detectar el estado de bajada R y prender motorX
MOTORX.RotateContinuous(AsyncStepper::CW);
}
if(EstXR == HIGH && EstAntXR == LOW){//Detectar el estado de subida R y apagar motorX
MOTORX.Stop();
}
if(EstXL == LOW && EstAntXL == HIGH){//Detectar el estado de bajada L y prender motorX
MOTORX.RotateContinuous(AsyncStepper::CCW);
}
if(EstXL == HIGH && EstAntXL == LOW){//Detectar el estado de subida L y apagar motorX
MOTORX.Stop();
}
if(EstYU == LOW && EstAntYU == HIGH){//Detectar el estado de bajada U y prender motorY
MOTORY.RotateContinuous(AsyncStepper::CW);
}
if(EstYU == HIGH && EstAntYU == LOW){//Detectar el estado de subida U y apagar motorY
MOTORY.Stop();
}
if(EstYD == LOW && EstAntYD == HIGH){//Detectar el estado de bajada D y prender motorY
MOTORY.RotateContinuous(AsyncStepper::CCW);
}
if(EstYD == HIGH && EstAntYD == LOW){//Detectar el estado de subida D y apagar motorY
MOTORY.Stop();
}
MOTORX.Update();
MOTORY.Update();
EstAntXR=EstXR;//Actualizar estado anterior de los pulsadores
EstAntXL=EstXL;
EstAntYU=EstYU;
EstAntYD=EstYD;
}