//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
//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);//rele
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);
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(3,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 (" ");
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;
} }
lcd.setCursor(0,1);
lcd.print (" PROGRAMADO ");
delay(1000);
return (x);
}