#define pinPulsador 2
#define STEP 40
#define DIR 39
#define PIR 4
volatile bool detectaPersona = false;
int pasosRegreso = 0;
void ARDUINO_ISR_ATTR isr_gpio(){
detectaPersona = true;
}
void setup(){
Serial.begin(115200);
pinMode(pinPulsador, INPUT_PULLUP);
pinMode(STEP, OUTPUT);
pinMode(DIR, OUTPUT);
attachInterrupt(PIR, isr_gpio, FALLING);
}
void loop(){
if(digitalRead(pinPulsador)==LOW){
MoverMotorHorario();
}
}
void MoverMotorHorario(){
digitalWrite(DIR, HIGH);
for(int i = 0; i < 1500; i++){
digitalWrite(STEP, HIGH);
delay(1);
digitalWrite(STEP, LOW);
delay(1);
}
Serial.println("a");
delay(4000);
MoverMotorAntihorario();
}
void MoverMotorAntihorario(){
Serial.println("b");
digitalWrite(DIR, LOW);
for(int i = 0; i < 1500; i++){
if(detectaPersona){
pasosRegreso = i;
MoverMotorHorarioPIR();
return;
}
digitalWrite(STEP, HIGH);
delay(1);
digitalWrite(STEP, LOW);
delay(1);
}
delay(4000);
}
void MoverMotorHorarioPIR(){
digitalWrite(DIR, HIGH);
for(int i=0; i<pasosRegreso; i++){
digitalWrite(STEP, HIGH);
delay(1);
digitalWrite(STEP, LOW);
delay(1);
}
}