//código que trata DEBOUNCE
const uint8_t ledPisca = 2;
const uint8_t ledBotao = 5;
const uint8_t buttonPin = 4;
uint32_t tempoAnterior = 0;
const uint32_t intervalo = 500;
bool estadoLed = false;
bool estado = false;
// --- debounce ---
bool ultimoEstadoBotao = HIGH;
bool estadoBotao = HIGH;
uint32_t ultimoTempoDebounce = 0;
const uint32_t tempoDebounce = 40; // 50 ms
void setup() {
pinMode(ledPisca, OUTPUT);
pinMode(ledBotao, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
uint32_t tempoAtual = millis();
// --- LED piscando ---
if (tempoAtual - tempoAnterior >= intervalo) {
tempoAnterior = tempoAtual;
estadoLed = !estadoLed;
digitalWrite(ledPisca, estadoLed);
}
// --- leitura do botão ---
bool leitura = digitalRead(buttonPin);
// se mudou, reinicia o tempo de debounce
if (leitura != ultimoEstadoBotao) {
ultimoTempoDebounce = tempoAtual;
}
// verifica se já passou o tempo de debounce
if ((tempoAtual - ultimoTempoDebounce) >= tempoDebounce) {
// se o estado estabilizou
if (leitura != estadoBotao) {
estadoBotao = leitura;
// detecta clique (HIGH -> LOW)
if (estadoBotao == LOW) {
estado = !estado;
digitalWrite(ledBotao, estado);
}
}
}
// salva leitura atual
ultimoEstadoBotao = leitura;
}