volatile bool isPressed2 = false;
volatile bool isPressed3 = false;
volatile bool isPressed5 = false;
bool alarmeAtivo = false;
int tempoInicioAlarme = 0;
void pressButton2() {
isPressed2 = true;
}
void pressButton3() {
isPressed3 = true;
}
void pressButton5() {
isPressed5 = true;
}
void setup() {
pinMode(13, OUTPUT);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(5, INPUT);
attachInterrupt(digitalPinToInterrupt(2), pressButton2, RISING);
attachInterrupt(digitalPinToInterrupt(3), pressButton3, RISING);
attachInterrupt(digitalPinToInterrupt(5), pressButton5, RISING);
}
void loop() {
if (isPressed2) {
tone(13, 1000);
alarmeAtivo = true;
tempoInicioAlarme = millis();
isPressed2 = false;
}
if (isPressed3) {
noTone(13);
alarmeAtivo = false;
isPressed3 = false;
}
if (isPressed5) {
if (alarmeAtivo) {
noTone(13);
alarmeAtivo = false;
int tempoAtual = millis();
int tempoDecorrido = tempoAtual - tempoInicioAlarme;
if (tempoDecorrido < 5000) {
tempoInicioAlarme = tempoAtual - (5000 - tempoDecorrido);
}
}
isPressed5 = false;
}
if (alarmeAtivo && millis() - tempoInicioAlarme >= 30000) {
noTone(13);
alarmeAtivo = false;
}
}