#include <TimerOne.h>
unsigned long millisTarefa1 = millis();
#define ledA 13
#define ledArmd 12
#define ledAmrl 11
#define ledLrj 6
#define btn1 2
#define btn2 3
#define debounceDelay 10
int ledAlarmeStatus = LOW;
int ledArmadoStatus = LOW;
bool alarmeArmado = false;
void setup() {
Serial.begin(9600);
pinMode(ledA, OUTPUT);
pinMode(ledArmd, OUTPUT);
pinMode(ledLrj, OUTPUT);
pinMode(ledAmrl, OUTPUT);
pinMode(btn1, INPUT_PULLUP);
pinMode(btn2, INPUT_PULLUP);
digitalWrite(ledLrj, LOW);
attachInterrupt(digitalPinToInterrupt(btn1), toogle_Alarme, LOW);
attachInterrupt(digitalPinToInterrupt(btn2), toogle_Alarme2, LOW);
}
void loop() {
digitalWrite(ledAmrl, !digitalRead(ledAmrl));
delay(500);
tarefa1();
}
void alarme_Acao() {
digitalWrite(ledA, !digitalRead(ledA));
digitalWrite(ledArmd, !digitalRead(ledArmd));
}
void alarme_Acao2() {
digitalWrite(ledA, LOW);
digitalWrite(ledArmd, LOW);
}
boolean debounce(int pin)
{
boolean state;
boolean previousState;
previousState = digitalRead(pin);
for (int counter = 0; counter < debounceDelay; counter++)
{
delay(1); // Aguarda 1 milisegundo
state = digitalRead(pin); // Leitura da entrada digital
if ( state != previousState)
{
counter = 0;
previousState = state;
}
}
return state;
}
void toogle_Alarme() {
if (debounce(btn1)) {
if(!alarmeArmado){
alarmeArmado = true;
digitalWrite(ledArmd, HIGH);
digitalWrite(ledLrj, HIGH);
Timer1.initialize(1000000);
Timer1.attachInterrupt(alarme_Acao);
}
}
}
void toogle_Alarme2() {
if (debounce(btn2)) {
if(alarmeArmado){
alarmeArmado = false;
digitalWrite(ledLrj, LOW);
// Timer1.detachInterrupt();
digitalWrite(ledA, LOW);
digitalWrite(ledArmd, LOW);
Timer1.initialize(1000000);
Timer1.attachInterrupt(alarme_Acao2);
}
}
}