//Adivionado segundo botão para ligar e desligar ios LEDs separadamente
//Arrumei o clique repetido do botao com o bool
void setup()
{
Serial.begin(115200);
pinMode(19, OUTPUT); //saida LED vermelho
pinMode(18, OUTPUT); //saida LED azul
pinMode(5, OUTPUT); //saida buzz(sirene)
pinMode(22, INPUT_PULLUP); //botao do BUZZER sirene
pinMode(4, INPUT_PULLUP); //botão para liga/desliga LEDs
}
void loop()
{
delay(10);
static bool ligasirene; //botão liga/desliga sirene
static bool ligaled;//LED ligado (! desligado)
static unsigned long t; //millis
static int n_apertos; //contagem de apertos (botaoBUZZER)
static int l_apertos; //contagem de apertos (botaoLEDs)
//static int rep; //repique
static unsigned long ultimo_tempo_botao = 0; //tempo do último clique válido (BUZZ)
static bool botao_anterior = HIGH; //estado anterior do botão (BUZZ)
static unsigned long ultimo_t_botao_led = 0; //tempo do ultimo clique valido do botao (LED)
static unsigned long botao_anterior_led = HIGH; // estado anterior do botao (LED)
//repique melhoado para a leitura do botao (BUZZER)
bool botao_atual = digitalRead(22);
//transição de high para low (botão pressionado) (BUZZER)
if (botao_anterior == HIGH && botao_atual == LOW)
{
//verifica o tempo suficiente desde o último clique do botao (BUZZER)
if (millis() - ultimo_tempo_botao > 300)
{
n_apertos++;
ultimo_tempo_botao = millis();
ligasirene = !ligasirene;
Serial.println("botão acionado " + String(n_apertos) + " vezes");
//Serial.println(n_apertos);
//avisa estado da sirene
if(ligasirene)
{
Serial.println("sirene ligada");
}
else
{
Serial.println("sirene desligada");
}
}
}
botao_anterior = botao_atual; // Atualiza estado anterior do botao (BUZZER)
bool botao_atual_led = digitalRead(4); //leitura do novo botao (LED)
//transiçao do high pro low (botao LEDs)
if(botao_anterior_led == HIGH && botao_atual_led == LOW)
{
//verifica o tempo suficiente desde o ultimo clique do botao (LEDs)
if(millis() - ultimo_t_botao_led >300)
{
l_apertos++;
ligaled = !ligaled; //alterna estado dos LEDs
ultimo_t_botao_led = millis();
Serial.println("LEDS acionados " +String(l_apertos)+ " vezes");
if(ligaled)
{
Serial.println("led ligado!");
}
else
{
Serial.println("led desligado!");
}
}
}
botao_anterior_led = botao_atual_led; //atualiza estado do botao (LED)
//LEDs piscando alternadamente com o buzzer
//piscar os leds
if(millis()-t >=500)
{
t=millis();
if(ligaled)
{
digitalWrite(19,!digitalRead(19));
digitalWrite(18,!digitalRead(19));
}
else
{
//desliga os dois LEDs
digitalWrite(19,0);
digitalWrite(18,0);
}
}
//tocar a sirene
if(ligasirene && digitalRead(19))
{
tone(5,300);
}
else if(ligasirene && !digitalRead(19))
{
tone(5,500);
}
else
{
tone(5,0);
}
}