#include <Stepper.h>
const int passo_por_volta = 200;
#define botao 23 //define botão no pino 23 do esp32
//ULN2003 Pinos do Driver
#define IN1 27
#define IN2 26
#define IN3 25
#define IN4 33
Stepper myStepper(passo_por_volta, IN1, IN3, IN2, IN4);
//VARIÁVEIS
bool flag = 0; //define a variave com o valor 0
bool interrupcao_ocorreu = 0; //define a variavel para interrupção com valor inicial 0
void INTERRUPCAO() //FUNÇÃO CHAMADA AO OCORRER INTERRUPÇÃO
{
if(interrupcao_ocorreu==0) { //define uma condição, se a variavel interrupcao_ocorreu for igual a 0
interrupcao_ocorreu = 1; //caso a condição acima for atendida a mesma se tornará 1
flag=!flag; //e flag inverterá seu valor atual, que começa em 0
Serial.println("Interrompeu"); //escreverá INTERROMPEU na serial
}
}
void setup()
{
Serial.begin(115200);
pinMode(botao, INPUT_PULLUP); //define a variavel botao como uma entrada em pull up
attachInterrupt(botao, INTERRUPCAO, FALLING);
myStepper.setSpeed(150);
}
void loop()
{
while(interrupcao_ocorreu==1) //RETORNA VERDADEIRO APÓS INTERRUPÇÃO EXTERNAR OCORRER
{
delay(300); //AGUARDA 300ms A FIM DE GARANTIR FILTRO DEBOUNCE PARA BOTÃO
interrupcao_ocorreu = 0; //LIMPA VARIÁVEL DE ESTOURO DA INTERRUPÇÃO EXTERNA
}
if( flag == 1) //define uma condição para quando a variavel flag for igual a 1
{
//Motor girando no sentido horário
Serial.println("Motor girando"); //apos a condição acima ser verdadeira escreverá na serial MOTOR GIRANDO
myStepper.step(1);
delay(2);
}
else
{
//Motor parado
Serial.println("Motor parado"); //caso a condição não for verdadeira escreverá na serial MOTOR PARADA
myStepper.step(0);
delay(10);
}
}