// https://www.filipeflop.com/blog/uso-de-interrupcoes-externas-com-esp32/
#include <LiquidCrystal.h>
#define GPIO_BOTAO 15
#define TEMPO_DEBOUNCE 10 //ms
LiquidCrystal lcd(22,23,5,18,19,21);// Change this for your connections (obviously)
unsigned long millisTarefa1 = millis();
int contador=0;
int contador_acionamentos = 0;
unsigned long timestamp_ultimo_acionamento = 0;
/* Função ISR (chamada quando há geração da
interrupção) */
void IRAM_ATTR funcao_ISR()
{
/* Conta acionamentos do botão considerando debounce */
if ( (millis() - timestamp_ultimo_acionamento) >= TEMPO_DEBOUNCE )
{
contador_acionamentos++;
timestamp_ultimo_acionamento = millis();
}
}
void setup()
{
lcd.begin(16, 2);
pinMode(GPIO_BOTAO, INPUT);
attachInterrupt(GPIO_BOTAO, funcao_ISR, RISING);
}
void loop()
{
if((millis() - millisTarefa1) > 1000){
millisTarefa1 = millis();
lcd.clear();
lcd.print("numero de pulsos ");
lcd.setCursor(0, 1);
lcd.print("pulsos "); lcd.print(contador_acionamentos);
}
}