// Definindo as constantes dos pinos que serão utilizados
const int pino_botao_subir = 5; // pino do botão de subir
const int pino_botao_descer = 19; // pino do botão de descer
const int LED_PIN = 2; // pino do LED
const int SERIAL_BAUD_RATE = 115200; // taxa de transmissão serial
// Variáveis para debounce e tempo dos botões
const unsigned long debounceDelay = 50;
const unsigned long longo_tempo = 800; // tempo para detectar pressionamento longo
unsigned long ultimoTempoPressionamentoSubir = 0;
unsigned long ultimoTempoPressionamentoDescer = 0;
unsigned long tempoPressionamentoSubir = 0;
// Flag para indicar se os botões estão pressionados
volatile bool botao_subir_pressionado = false;
volatile bool botao_descer_pressionado = false;
volatile bool botao_subir_longo = false;
volatile bool botao_descer_longo = false;
// Função de interrupção para o botão de subir
void interrupcaoBotaoSubir() {
botao_subir_pressionado = true;
}
// Função de interrupção para o botão de descer
void interrupcaoBotaoDescer() {
botao_descer_pressionado = true;
}
void setup() {
// Configurando os pinos dos botões como entrada e ativa a pull-up interna
pinMode(pino_botao_subir, INPUT_PULLUP);
pinMode(pino_botao_descer, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
// Iniciando a comunicação serial
Serial.begin(SERIAL_BAUD_RATE);
Serial.println("Hello, ESP32!");
// Configurando as interrupções para os botões
attachInterrupt(digitalPinToInterrupt(pino_botao_subir), interrupcaoBotaoSubir, FALLING);
attachInterrupt(digitalPinToInterrupt(pino_botao_descer), interrupcaoBotaoDescer, FALLING);
}
void comando_teste()
{
//unsigned long tempoAtual = millis();
// Verifica se o botão de subir foi pressionado
if (botao_subir_pressionado) {
delay(200);
if (digitalRead(pino_botao_subir) == LOW) {
Serial.println("subindo mais!");
botao_subir_longo = true; // Limpa a flag de pressionamento curto
return;
}
Serial.println("subindo!");
botao_subir_pressionado = false; // Limpa a flag de pressionamento curto
}
// Verifica se o botão de descer foi pressionado
if (botao_descer_pressionado) {
delay(200);
if (digitalRead(pino_botao_descer) == LOW) {
Serial.println("descendo mais!");
botao_descer_longo = true; // Limpa a flag de pressionamento curto
return;
}
Serial.println("descendo!");
botao_descer_pressionado = false; // Limpa a flag após o processamento
}
}
void executa_teste(){
if (botao_subir_pressionado) {
Serial.println("subindo executa_teste!");
}
if (botao_descer_pressionado) {
Serial.println("descendo executa_teste!");
}
if (botao_subir_longo) {
Serial.println("subindo mais executa_teste!");
botao_subir_longo = false;
}
}
void loop() {
comando_teste();
executa_teste();
}