#define ledR 4
#define ledV 1
#define botonV 2
#define botonA 6
#define st1 42
#define st2 39
#define dir1 41
#define dir2 40
volatile bool pushBlue = false;
int pasos=0;
void ARDUINO_ISR_ATTR interrupcionBoton(){
pushBlue = true;
}
void setup() {
Serial.begin(115200);
pinMode(botonV, INPUT_PULLUP);
pinMode(botonA, INPUT_PULLUP);
pinMode(st1, OUTPUT);
pinMode(st2, OUTPUT);
pinMode(dir1, OUTPUT);
pinMode(dir2, OUTPUT);
pinMode(ledR, OUTPUT);
pinMode(ledV, OUTPUT);
digitalWrite(ledR, HIGH);
digitalWrite(ledV, LOW);
attachInterrupt(botonA, interrupcionBoton, FALLING);
}
void loop() {
if(digitalRead(botonV)==LOW){
digitalWrite(ledR, LOW);
movHor();
}
}
void movHor(){
digitalWrite(dir1, HIGH);
digitalWrite(dir2, LOW);
for (int i = 0; i < 1500; i++) {
if(pushBlue){
pasos=i;
movInt();
return;
}
digitalWrite(st1, HIGH);
digitalWrite(st2, HIGH);
delayMicroseconds(1000);
digitalWrite(st1, LOW);
digitalWrite(st2, LOW);
delayMicroseconds(1000);
}
digitalWrite(ledV, HIGH);
delay(5000);
movAntHor();
}
void movInt(){
digitalWrite(dir1, !digitalRead(dir1));
digitalWrite(dir2, !digitalRead(dir2));
for (int i = 0; i < pasos ; i++){
digitalWrite(st1, HIGH);
digitalWrite(st2, HIGH);
delayMicroseconds(1000);
digitalWrite(st1, LOW);
digitalWrite(st2, HIGH);
delayMicroseconds(1000);
}
digitalWrite(ledV, HIGH);
delay(3000);
movAntHor();
}
void movAntHor(){
digitalWrite(ledV, LOW);
digitalWrite(dir1, LOW);
digitalWrite(dir2, HIGH);
for (int i = 0; i < 1500; i++) {
if(pushBlue){
pasos=i;
movInt();
return;
}
digitalWrite(st1, HIGH);
digitalWrite(st2, HIGH);
delayMicroseconds(1000);
digitalWrite(st1, LOW);
digitalWrite(st2, LOW);
delayMicroseconds(1000);
}
digitalWrite(ledR, HIGH);
}