#include "preambulo.h"
void setup() {
Serial.begin(9600); // Inicia a comunicação serial
display.setBrightness(7); // Configura o brilho do display (0 a 7)
pinMode(BUZZER, OUTPUT); // Configura o pino do buzzer como saída
atualizarDisplay(hora, minuto); // Mostra 00:00 como valor inicial no display
mostrarMenu(); // Mostra o menu inicial
}
void loop() {
unsigned long tempoAtual = millis();
/*************************** Atualiza o relógio a cada minuto *****************************/
if (tempoAtual - tempoAnterior >= 60000) {
tempoAnterior = tempoAtual;
// Incrementa o minuto
minuto++;
// Se os minutos chegarem a 60, incrementa a hora e zera os minutos
if (minuto >= 60) {
minuto = 0;
hora++;
}
// Se as horas chegarem a 24, zera as horas
if (hora >= 24) {
hora = 0;
}
// Atualiza o display com o novo horário
atualizarDisplay(hora, minuto);
}
/*******************************************************************************************/
/********************* Verifica se é hora de alternar o estado dos dois pontos ***************/
if (tempoAtual - tempoPiscar >= 500) {
tempoPiscar = tempoAtual;
mostrarPontos = !mostrarPontos; // Alterna o estado dos dois pontos
// Atualiza o display com o estado atual dos dois pontos
atualizarDisplay(hora, minuto);
}
/*********************************************************************************************/
/** Verifica se o alarme foi configurado e se a hora atual coincide com o horário do alarme **/
/*********************************************************************************************/
if (alarmeConfigurada && hora == horaAlarme && minuto == minutoAlarme && !alarmeDisparada) {
alarmeAtiva = true;
alarmeDisparada = true; // Marca o alarme como disparado para o minuto atual
inicioAlarme = tempoAtual; // Marca o tempo de início do alarme
Serial.println("O alarme está tocando!");
}
/*********************************************************************************************/
/*********************** Disparo do Alarme sem delay ****************************************/
if (alarmeAtiva) {
if (tempoAtual - inicioAlarme < duracaoAlarme) { // Alarme toca pelo tempo configurado
if (tempoAtual - tempoAlarme >= 200) { // Alterna o estado do buzzer a cada 200 ms
tempoAlarme = tempoAtual;
estadoBuzzer = !estadoBuzzer;
// digitalWrite(BUZZER, estadoBuzzer ? HIGH : LOW);
estadoBuzzer ? tone(BUZZER, 500) : noTone(BUZZER);
}
} else {
// Desliga o alarme após o tempo configurado
alarmeAtiva = false;
// digitalWrite(BUZZER, LOW); // Garante que o buzzer está desligado
noTone(BUZZER); // Garante que o buzzer está desligado
Serial.println("Alarme desligado.");
mostrarMenu(); // Exibe o menu novamente após desligar o alarme
}
}
/*********************************************************************************************/
/******************************** Verifica a escolha do Menu *********************************/
// Verifica se há dados disponíveis no monitor serial para ajuste manual
if (Serial.available()) {
String entrada = Serial.readStringUntil('\n');
if (entrada == "0") {
configurarHora();
} else if (entrada == "1") {
configurarAlarme();
} else {
Serial.println("Opção inválida. Por favor, escolha 0 ou 1.");
mostrarMenu(); // Mostra o menu novamente
}
}
/*********************************************************************************************/
}