#include <LiquidCrystal_I2C.h> // Biblioteca para LCD I2C
#include <RTClib.h> // Biblioteca para Relógio em Tempo Real
#include <Wire.h> // Biblioteca para comunicação I2C
#define SERIAL_OPTION 0 // Opção de comunicação serial: 0 para desligado, 1 para ligado
#define UTC_OFFSET -3 // Ajuste de fuso horário para UTC-3
LiquidCrystal_I2C lcd(0x27,16,2); // Endereço de acesso: 0x3F ou 0x27
RTC_DS1307 RTC;
void setup() {
if (SERIAL_OPTION) Serial.begin(9600); // Inicialização da comunicação serial
lcd.init(); // Inicialização do LCD
lcd.backlight(); // Ligando o backlight do LCD
RTC.begin(); // Inicialização do Relógio em Tempo Real
pinMode(LED_BUILTIN, OUTPUT);
RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
// RTC.adjust(DateTime(2024,5,6,08,15,00)); // Ajustar a data e hora apropriadas uma vez inicialmente, depois comentar
}
void loop() {
DateTime now = RTC.now();
// Calculando o deslocamento do fuso horário
int offsetSeconds = UTC_OFFSET * 3600; // Convertendo horas para segundos
now = now.unixtime() + offsetSeconds; // Adicionando o deslocamento ao tempo atual
// Convertendo o novo tempo para DateTime
DateTime adjustedTime = DateTime(now);
if (SERIAL_OPTION) {
Serial.print(adjustedTime.day());
Serial.print("/");
Serial.print(adjustedTime.month());
Serial.print("/");
Serial.print(adjustedTime.year());
Serial.print(" ");
Serial.print(adjustedTime.hour() < 10 ? "0" : ""); // Adiciona zero à esquerda se hora for menor que 10
Serial.print(adjustedTime.hour());
Serial.print(":");
Serial.print(adjustedTime.minute() < 10 ? "0" : ""); // Adiciona zero à esquerda se minuto for menor que 10
Serial.print(adjustedTime.minute());
Serial.print(":");
Serial.print(adjustedTime.second() < 10 ? "0" : ""); // Adiciona zero à esquerda se segundo for menor que 10
Serial.print(adjustedTime.second());
Serial.print("\n");
}
lcd.setCursor(0,0);
lcd.print("DATA: ");
lcd.print(adjustedTime.day() < 10 ? "0" : ""); // Adiciona zero à esquerda se dia for menor que 10
lcd.print(adjustedTime.day());
lcd.print("/");
lcd.print(adjustedTime.month() < 10 ? "0" : ""); // Adiciona zero à esquerda se mês for menor que 10
lcd.print(adjustedTime.month());
lcd.print("/");
lcd.print(adjustedTime.year());
lcd.setCursor(0,1);
lcd.print("HORA: ");
lcd.print(adjustedTime.hour() < 10 ? "0" : ""); // Adiciona zero à esquerda se hora for menor que 10
lcd.print(adjustedTime.hour());
lcd.print(":");
lcd.print(adjustedTime.minute() < 10 ? "0" : ""); // Adiciona zero à esquerda se minuto for menor que 10
lcd.print(adjustedTime.minute());
lcd.print(":");
lcd.print(adjustedTime.second() < 10 ? "0" : ""); // Adiciona zero à esquerda se segundo for menor que 10
lcd.print(adjustedTime.second());
if(adjustedTime.hour() == 11 && adjustedTime.minute() == 40 && adjustedTime.second() <= 15) {
digitalWrite(LED_BUILTIN, HIGH);
} else {
digitalWrite(LED_BUILTIN, LOW);
}
delay(1000);
}