volatile bool alarme = false;
volatile bool soneca = false;
volatile bool toggle = false;
volatile uint16_t count = 0;
void Toggle() {
toggle = true;
}
void Soneca() {
if(alarme){
alarme = false;
soneca = true;
count = 0;
TCNT1 = 0;
Serial.println("Soneca begin");
}
}
ISR(TIMER1_COMPA_vect) {
count++;
TCNT1 = 0;
}
void setup() {
Serial.begin(9600);
// Set pin 13 as output
pinMode(13, OUTPUT);
// Set pin 2 as input
pinMode(2, INPUT);
// Set pin 1 as input
pinMode(3, INPUT);
attachInterrupt(
digitalPinToInterrupt(2), Toggle, RISING
);
attachInterrupt(
digitalPinToInterrupt(3), Soneca, RISING
);
cli();
// Enabling CTC Mode
TCCR1A = 0b00000000;
TCCR1B = 0b00001000;
// enabling 1024 prescaler
TCCR1B = 0b00000101;
// Clock = 15625Hz
// 1/15625 = 0.000064
// Setting compare value OCR1A
// 15625*0.000064 = 1
OCR1A = 15625;
// Enabling OCIE1A on TIMSK1
TIMSK1 = TIMSK1 | 0b00000010;
sei();
}
void loop() {
Serial.println(count);
if (soneca){
// soneca acabou
if(count >= 5){
Serial.println("Soneca end");
alarme = true;
soneca = false;
count = 0;
TCNT1 = 0;
}
}
if (alarme) {
tone(13, 262, 20);
// desligou sozinho
if(count >= 30){
alarme = false;
}
}
if(toggle){
alarme = !alarme;
toggle = false;
count = 0;
TCNT1 = 0;
}
}