/*
Desafio! Desconecte os dois LEDs e acrescente um buzzer. Altere
o programa para que ao apertar o botão por 2 segundos o botão
o buzzer será acionado. Ao apertar novamente o botão, desliga o
buzzer instantaneamente.
*/
/* Programa de acionamento do buzzer através do pressionamento do botão por 2 segundos. */
#define pinoBotao 10 /* Define o pino do botão. */
#define pinoBuzzer 8 /* Define o pino do buzzer. */
// Criação das variáveis.
bool estadoBotao; /* Variável estado do botão. */
bool buzzerLigado = false; // Estado do buzzer.
unsigned long tempoInicial = 0; // Armazena o momento que o botão foi pressionado.
void setup() {
pinMode(pinoBotao, INPUT_PULLUP); /* Configura pino do botão como entrada. */
pinMode(pinoBuzzer, OUTPUT); /* Configura o pino do buzzer como como saída. */
}
void loop() {
/* Lê o estado do botão e armazena na variável. */
estadoBotao = digitalRead(pinoBotao);
// Verifica se o botão está pressionado.
if (estadoBotao == LOW) {
// Se o buzzer não está ligado, inicia a contagem.
if (!buzzerLigado) {
if (tempoInicial == 0) { // Se o tempo inicial é zero, armazena o momento atual.
tempoInicial = millis();
} else if (millis() - tempoInicial >= 2000) { // Se passaram 2 segundos, liga o buzzer.
buzzerLigado = true;
digitalWrite(pinoBuzzer, HIGH);
}
} else { // Se o buzzer já está ligado, desliga imediatamente ao pressionar o botão.
buzzerLigado = false;
digitalWrite(pinoBuzzer, LOW);
tempoInicial = 0; // Reseta o tempo inicial.
}
} else { // Se o botão não está pressionado, reseta o tempo inicial.
tempoInicial = 0;
}
}