const int buttonPin = 5
const int ledPin = 2;
int ledState = HIGH; // estado atual do pino de saída
int buttonState; // leitura atal do pino de entrada
int lastButtonState = LOW; // leitura previa – anterior do pino de entrada
// As variáveis a seguir são do tipo “unsigned long” porque o tempo, medido em milissegundos,
// rapidamente se tornará um número maior do que pode ser armazenado em um `int`.
unsigned long lastDebounceTime = 0; // a última vez que o pino de saída foi alternado
unsigned long debounceDelay = 50; // o tempo de debounce; aumente se a saída piscar.
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState); // seta estado inicial do LED
}
void loop() {
int reading = digitalRead(buttonPin);
// Verifica se você acabou de pressionar o botão (ou seja, se a entrada passou de BAIXA para ALTA)
// e se você esperou tempo suficiente desde a última vez que pressionou para ignorar qualquer ruído:
// Se a chave mudar devido a ruído ou pressão:
if (reading != lastButtonState) {
// reset o contador de the debouncing
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
// Independentemente da leitura, ela permanece nesse valor há mais tempo do que o atraso
// de debounce, portanto, considere-a como o estado atual real:
// Se o estado do botão tiver mudado:
if (reading != buttonState) {
buttonState = reading;
// O LED só deve ser ativado se o novo estado do botão for ALTO.
if (buttonState == HIGH) {
ledState = !ledState;
}
}
}
digitalWrite(ledPin, ledState);
// Salva a leitura. Na próxima iteração do loop, será o último estado do botão.
lastButtonState = reading;
}