#define STEP_PIN 15 // Pin de paso (STEP) conectado al controlador A4899
#define DIR_PIN 2 // Pin de dirección (DIR) conectado al controlador A4899
#define ENABLE_PIN 4 // Pin de habilitación (ENABLE) conectado al controlador A4899
#define ENDSTOP_PIN 13 // Pin del final de carrera
int retardo = 3000; // Menor numero el giro es mas rapido
int tiempo = 100; // durante cuanto timpo da el giro el motor (vueltas)
void setup() {
pinMode(STEP_PIN , OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(ENABLE_PIN, OUTPUT);
pinMode(ENDSTOP_PIN, INPUT_PULLUP);// habilitar el final de carrera como entrada pul-up
digitalWrite(ENABLE_PIN, LOW); // Habilitar el controlador
}
void loop() {
// Leer el estado del final de carrera
int endstopState = digitalRead(ENDSTOP_PIN);
// Verificar si el final de carrera está activado
if (endstopState == LOW) {
// Detener el motor
digitalWrite(STEP_PIN, LOW);
}
else(endstopState == HIGH); {
digitalWrite(STEP_PIN, HIGH);
giro(STEP_PIN,DIR_PIN,ENABLE_PIN, 1);
delay(2000);
giro(STEP_PIN,DIR_PIN,ENABLE_PIN, 0);
delay(2000);
return; // Salir de la función loop()
}
}
void giro (int step_pin, int dire_pin, int enable_pin, int dir){
if ( dir == 0 ) {
digitalWrite(dire_pin, LOW); // direccion de giro 0
for (int i = 0; i < tiempo; i++) { // da pasos por un tiempo
digitalWrite(step_pin, HIGH);
delayMicroseconds(retardo);
digitalWrite(step_pin, LOW);
delayMicroseconds(retardo);
}
}
if ( dir == 1 ) {
digitalWrite(dire_pin, HIGH); // direccion de giro 1
for (int i = 0; i < tiempo; i++) { // da pasos por un tiempo
digitalWrite(step_pin, HIGH);
delayMicroseconds(retardo);
digitalWrite(step_pin, LOW);
delayMicroseconds(retardo);
}
}
digitalWrite(ENABLE_PIN, HIGH); // quita la habilitacion del
}