#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
#define led_timer1 13 // Pino para o LED controlado pelo Timer1
volatile byte led1_status = LOW; // Estado do LED controlado pela interrupção
volatile int interruptCount = 0; // Contador de interrupções
ISR(TIMER1_OVF_vect) {
// Incrementa o contador de interrupções
interruptCount++;
// Exibe o contador na segunda linha do LCD
lcd.setCursor(0, 1);
lcd.print("Contador: ");
lcd.print(interruptCount);
// Verifica se o contador é múltiplo de 5 (a cada 5 segundos)
if (interruptCount % 5 == 0) {
digitalWrite(led_timer1, HIGH); // Acende o LED
lcd.setCursor(0, 2);
lcd.print("Acendendo o LED ");
// Aguardar 1 segundo com o LED aceso
delay(1000);
digitalWrite(led_timer1, LOW); // Desliga o LED
// Limpa a mensagem na linha 3 e reseta o display de progresso
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
} else {
// Preenche a linha 4 do LCD com um bloco a cada segundo
lcd.setCursor((interruptCount % 5) - 1, 3);
lcd.print("\xFF"); // Caractere cheio do LCD
}
}
void setup() {
lcd.begin(20, 4);
// Configurações iniciais do LCD
lcd.setCursor(2, 0);
lcd.print("Interrupcoes");
// Configura o LED como saída
pinMode(led_timer1, OUTPUT);
digitalWrite(led_timer1, LOW);
// Configura o Timer1 para operar em modo normal
TCCR1A = 0b00000000;
TCCR1B = 0b00000100; // Prescaler de 256 (~1 segundo)
TIMSK1 = 0b00000001; // Habilita a interrupção por overflow do Timer1
sei(); // Habilita interrupções globais
}
void loop() {
// O loop principal permanece vazio pois tudo é controlado pela interrupção
}