//Curso: Automação com Arduino
//Pasta: C:/AcDc
//2023_05_02_12ª Aula
//Programa: 2023_05_02_Aula_12-2 (RTC)
//Programa: 2024_06_13_Aula_12c(RTC)
//Exercício: Programa completo ############# Funcionou #################
//PROGRAMA COMPLETO
#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 relogio;
int ano = 0;
int mes = 0;
int dia = 0;
int hora = 0;
int minuto = 0;
int segundo = 0;
int hora_liga = 0;
int minuto_liga = 0;
int hora_desliga = 0;
int minuto_desliga = 0;
int x = 0;
void setup() {
lcd.init();
lcd.backlight();
while (! relogio.begin()) {
delay(500); }
pinMode(7, OUTPUT); //Para acionar o relé
pinMode(8, INPUT_PULLUP); //acertar relogio (1a. chave)
pinMode(9, INPUT_PULLUP); //acertar horário de acionamento (2a. chave)
pinMode(10, INPUT_PULLUP); //incrementa (3a. chave)
pinMode(11, INPUT_PULLUP); //decrementa (4a. chave)
pinMode(12, INPUT_PULLUP); //enter (5a. chave)
digitalWrite(7, HIGH);
if (!digitalRead(12)) {
relogio.adjust(DateTime(ano, mes, dia, hora, minuto));
delay(300); }
}
void loop() {
hora = relogio.now().hour();
minuto = relogio.now().minute();
segundo = relogio.now().second();
//lcd.setCursor(3,0);
lcd.setCursor(0, 0);
if (hora < 10 ) {
lcd.print ( "0" ); }
lcd.print (hora);
lcd.print (":");
if (minuto < 10 ) {
lcd.print ( "0" ); }
lcd.print (minuto);
lcd.print (":");
if (segundo < 10 ) {
lcd.print ( "0" ); }
lcd.print (segundo);
lcd.setCursor(2, 1);
if (hora_liga < 10 ) {
lcd.print ( "0" ); }
lcd.print (hora_liga); lcd.print (":");
if (minuto_liga < 10 ) {
lcd.print ( "0" ); }
lcd.print (minuto_liga);
lcd.print (" ");
if (hora_desliga < 10 ) {
lcd.print ( "0" ); }
lcd.print (hora_desliga);
lcd.print (":");
if (minuto_desliga < 10 ) {
lcd.print ( "0" ); }
lcd.print (minuto_desliga);
if (!digitalRead(8)) { //acertar relógio
lcd.setCursor(0, 0);
lcd.print (" ANO ");
ano = acertar( ) + 2000;
lcd.setCursor(0, 0);
lcd.print (" MES ");
mes = acertar( );
lcd.setCursor(0, 0);
lcd.print (" DIA ");
dia = acertar( );
lcd.setCursor(0, 0);
lcd.print (" HORA ");
hora = acertar( );
lcd.setCursor(0, 0);
lcd.print (" MINUTO ");
minuto = acertar( );
relogio.adjust(DateTime(ano, mes, dia, hora, minuto, 0));
lcd.clear( );
}
if (!digitalRead(9)) { // acertar horário de acionamento
lcd.setCursor(0, 0);
lcd.print (" HORA LIGA "); hora_liga = acertar( );
lcd.setCursor(0, 0);
lcd.print (" MINUTO LIGA "); minuto_liga = acertar( );
lcd.setCursor(0, 0);
lcd.print (" HORA DESLIGA "); hora_desliga = acertar( );
lcd.setCursor(0, 0);
lcd.print (" MINUTO DESLIGA "); minuto_desliga = acertar( );
lcd.clear( );
}
if (hora == hora_liga && minuto == minuto_liga) {
digitalWrite(7, LOW);
}
if (hora == hora_desliga && minuto == minuto_desliga) {
digitalWrite(7, HIGH); }
}
int acertar() {
lcd.setCursor(0, 1);
lcd.print (" ");
//Antes eu havia deixado só 2 espaços em branco e
//sobrepunha os caracteres no LCD
x = 0;
delay(300);
while (digitalRead(12)) {
lcd.setCursor(8, 1);
if (x < 10 ) {
lcd.print ( "0" ); }
lcd.print (x);
if (!digitalRead(10)) {
x++;
delay(300); }
if (!digitalRead(11)) {
x--;
delay(300); }
if (x < 0) {
x = 0; }
} //Fim do while
lcd.setCursor(0, 1);
lcd.print (" PROGRAMADO ");
delay(1000);
return (x);
} //Fim função acertar