// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][5] = {"DOM", "SEG", "TERÇ", "QUAR", "QUINT", "SEXT", "SAB"};
//////////LCD I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
void setup () {
pinMode(2,INPUT_PULLUP);
pinMode(3,INPUT_PULLUP);
pinMode(4,INPUT_PULLUP);
pinMode(12,OUTPUT);
//////LCD INI
lcd.init();
lcd.backlight();
//////////
Serial.begin(57600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// rtc.adjust(DateTime(2020, 9, 10, 13, 28, 00));
}
byte x=0, minutos=0, horas=0, minutos_d=0, horas_d=0;
void loop () {
lcd.setCursor(15,0);
lcd.print(x); ///
DateTime now = rtc.now();
/////////
lcd.setCursor(11,0);
lcd.print("ALA:");
//mostrar hora
if (now.hour()<10){
lcd.setCursor(0,0);
lcd.print("0");
lcd.setCursor(1,0);
lcd.print(now.hour(), DEC);
}
else {
lcd.setCursor(0,0);
lcd.print(now.hour(), DEC);
}
//////////////////////////
lcd.setCursor(2,0);
lcd.print(':');
lcd.setCursor(5,0);
lcd.print(':');
/////// melhorar visualização dos segundos
if (now.second()<10){
lcd.setCursor(6,0);
lcd.print('0');
lcd.setCursor(7,0);
lcd.print(now.second(), DEC);
}
else {
lcd.setCursor(6,0);
lcd.print(now.second(), DEC);
}
/////////////////////////
/////// melhorar visualização dos minutos
if (now.minute()<10){
lcd.setCursor(3,0);
lcd.print('0');
lcd.setCursor(4,0);
lcd.print(now.minute(), DEC);
}
else{
lcd.setCursor(3,0);
lcd.print(now.minute(), DEC);
}
////////////alarme liga ///
lcd.setCursor(0,1);
lcd.print("L:");
/////////
lcd.setCursor(4,1);
lcd.print(":");
if (digitalRead(2)==0 && x<7){
x++;
delay(50);
}
//// zera seleção
if (x==6){
x=0;
delay(50);
}
//////inclemento minutos
if (x==1){
if (digitalRead(3)==0 && minutos<=60){
minutos++;
delay(50);
}
}
///////
if (minutos==60){
minutos=0;
delay(50);
}
//////inclemento minutos
if (x==2){
if (digitalRead(3)==0 && horas<24){
horas++;
delay(50);
}
}
////zera horas
if (horas==24){
horas=0;
delay(50);
}
///////////MELHORAR A VISUALIZAÇÃO DO ALARME HORAS
if (horas<10){
lcd.setCursor(2,1);
lcd.print("0");
lcd.setCursor(3,1);
lcd.print(horas);
}
else{
lcd.setCursor(2,1);
lcd.print(horas);
}
///////////MELHORAR A VISUALIZAÇÃO DO ALARME MINUTOS
if (minutos<10){
lcd.setCursor(5,1);
lcd.print("0");
lcd.setCursor(6,1);
lcd.print(minutos);
}
else{
lcd.setCursor(5,1);
lcd.print(minutos);
}
/////////////////ALARME LIGA ///////////////
if (minutos==now.minute() && now.hour()==horas && x==5 ){
digitalWrite(12,1);
}
///////////////////alarme desliga inicio ///////////////
///////////////////////////////////////////////////
lcd.setCursor(12,1);
lcd.print(":");
///////
lcd.setCursor(8,1);
lcd.print("D:");
if (x==3){
if (digitalRead(3)==0 && minutos_d<=60){
minutos_d++;
delay(50);
}
}
///////
if (minutos_d==60){
minutos_d=0;
delay(50);
}
//////inclemento minutos
if (x==4){
/////////
if (digitalRead(3)==0 && horas_d<24){
horas_d++;
delay(50);
}
}
////zera horas
if (horas_d==24){
horas_d=0;
delay(50);
}
///////////MELHORAR A VISUALIZAÇÃO DESLIGA
if (horas_d<10){
lcd.setCursor(10,1);
lcd.print("0");
lcd.setCursor(11,1);
lcd.print(horas_d);
}
else{
lcd.setCursor(10,1);
lcd.print(horas_d);
}
///////////MELHORAR A VISUALIZAÇÃO DO ALARME MINUTOS
if (minutos_d<10){
lcd.setCursor(13,1);
lcd.print("0");
lcd.setCursor(14,1);
lcd.print(minutos_d);
}
else{
lcd.setCursor(13,1);
lcd.print(minutos_d);
}
/////////////////ALARME//
if (minutos_d==now.minute() && now.hour()==horas_d && x==5){
digitalWrite(12,0); ///////////desliga
}
}