#include <Arduino.h>
#include <Wire.h>
#include "U8g2lib.h"
#include "MENU_IMG.h"
#include "RTClib.h"
//U8G_SSD1306_128X64 lcd(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
U8G2_SSD1306_128X64_NONAME_1_HW_I2C lcd(U8G2_R0); //[page buffer, size = 128 bytes]
//Botões
#define B_ON 3
#define B_UP 4
#define B_OK 5
#define B_DW 6
#define B_BC 7
#define POS_Txt 15
#define POS_tmg-txt 3
int BE_UP = 0;
int BE_DW = 0;
int BE_OK = 0;
int BE_BC = 0;
int STOP_UP = 0;
int STOP_DW = 0;
int STOP_OK = 0;
int STOP_BC = 0;
int ANO = 2020;
int MES = 1;
int DIA = 1;
int HOR = 0;
int MIN = 0;
int SEG = 1;
int FORMATO = 0;
int AMPM = 0;
int ANO_RED = 0;
int POS_HOR = 0;
int BISEXTO = 0;
uint32_t temporizador = 0;
int SEGUNDO = 0;
int MINUTO = 0;
int TANQUE = 90;
int AGUA = 0;
int GELO = 0;
int ATV_AGUA = 0;
int TEMP_AGUA = 10;
int TEMPO_GELO = 10;
int CANCELAR = 0;
int HOR_GELO = 12;
int MIN_GELO = 0;
int TIMER_GELO = 1;
int HOR_AGUA_ATIV = 12;
int MIN_AGUA_ATIV = 0;
int HOR_AGUA_DESAT = 12;
int MIN_AGUA_DESAT = 0;
int TIMER_AGUA = 1;
#define LED 13
int LEDEST = 0;
int LIGADO = 3;
int TRAVA = 0;
int BLOQ = 0;
int ON = 0;
int time = 0;
int PS_BARRA_B = 12;
int MENU_TITULO = 2;
char menu_titulo[3] [20] ={
{" Menu"},
{" Data, Hora e Timer"},
{" Config. Agua e Gelo"}
};
const int MENU_LISTA = 2;
char menu_lista[2] [20] ={
{"Data, Hora e Timer"},
{"Config. Agua e Gelo"}
};
int item_1 = 0;
int item_2 = 0;
int item_3 = 0;
int item_4 = 0;
int select = 0;
int PS_CURSOR = 1;
int PS_SELECT = 11;
int FAG_ON = 1;
int FFG_ON = 1;
int ANIM_GELADA = 1;
int ANIM_GELO = 1;
RTC_DS1307 rtc; //Objeto rtc da classe DS1307
//RTC_DS3231 rtc; //Objeto rtc da classe DS3132
char diaDaSemana[7][12] = {"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"};
void SAVE(){
rtc.adjust(DateTime(ANO, MES, DIA, HOR, MIN, SEG));
}
void setup(){
rtc.begin();
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));// Ajusta de data e hora automatico
rtc.adjust(DateTime(ANO, MES, DIA, HOR, MIN, SEG)); //Ajusta o tempo do RTC manualmente
//Ordem (Ano,Mes,Dia,hora,minutos,segundos)
//Executar apenas quando precisar ajustar a data e hora, depois comentar essa linha
delay(100); //100 Milissegundos
lcd.begin();
pinMode(LED, OUTPUT);
pinMode(B_UP ,INPUT);
pinMode(B_DW ,INPUT);
pinMode(B_OK ,INPUT);
pinMode(B_BC ,INPUT);
pinMode(B_ON ,INPUT);
Serial.begin(9600);
}
void loop(){
if((HOR_AGUA_ATIV == HOR_AGUA_DESAT)){
HOR_AGUA_DESAT++;
if(HOR_AGUA_DESAT== 24)
{HOR_AGUA_DESAT = 0;}}
DateTime now = rtc.now();
HOR = now.hour();
MIN = now.minute();
if (now.year()<2000){
ANO_RED = now.year() - 1900;
}
if (now.year()>=2000){
ANO_RED = now.year() - 2000;
}
BE_UP =digitalRead(B_UP);
BE_DW =digitalRead(B_DW);
BE_OK =digitalRead(B_OK);
BE_BC =digitalRead(B_BC);
if((BE_UP == 0)&&(STOP_UP >= 1)){
STOP_UP = 0;}
if((BE_DW == 0)&&(STOP_DW >= 1)){
STOP_DW = 0;}
if((BE_OK == 0)&&(STOP_OK >= 1)){
STOP_OK = 0;}
if((BE_BC == 0)&&(STOP_BC >= 1)){
STOP_BC = 0;}
if((LIGADO == 4||LIGADO == 5||LIGADO == 6||LIGADO == 7||LIGADO == 8||LIGADO == 9)&&(BE_BC == 1)){
LIGADO = 3;
BE_BC = 0;
SAVE();
}
if(LIGADO == 3){
SEG = now.second();
DIA = now.day();
MES = now.month();
ANO = now.year();
if((BE_OK == 1)&&(select == 0)){
LIGADO = 4;
POS_HOR = 0;
BE_OK = 0;
}
if((BE_OK == 1)&&(select == 1)){
LIGADO = 5;
POS_HOR = 0;
BE_OK = 0;
}
if(BE_UP == 1){
select = 0;
}
if((BE_DW == 1)){
select = 1;
}
if((LIGADO == 3)&&(BE_BC == 1)){
LIGADO = 1;
BE_BC = 0;
}
item_2 = item_1 + 1;
if(item_2 >= MENU_LISTA){item_2 = 0;}
lcd.firstPage();
do{//Barra lateral posição - define em que posição a barra lateral estará
//Titulo do Menu
lcd.setFont(u8g_font_6x10);
lcd.setColorIndex(1);
lcd.drawBox(0, 0, 128, 11);
lcd.setColorIndex(0);
lcd.drawStr(0,8, menu_titulo[0]);
lcd.setColorIndex(1);
//backgound do Menu
//item selecionado
lcd.setFont(u8g_font_6x10);
lcd.drawStr(3,20, menu_lista[item_1]);
//item seguinte
lcd.setFont(u8g_font_6x10);
lcd.drawStr(3,32, menu_lista[item_2]);
//Barra de fundo
lcd.drawBox(0, 59, 128, 5);
lcd.drawXBMP(17, 60, 5, 3, BT_allArray[0]);
lcd.drawXBMP(59, 60, 7, 3, BT_allArray[6]);
lcd.drawXBMP(103, 60, 5, 3, BT_allArray[1]);
if(select == 0){
lcd.drawBox(1, 11, 123, 12);
lcd.setColorIndex(0);
lcd.drawStr(3,20, menu_lista[0]);
lcd.setColorIndex(1);
}
if(select == 1){
lcd.drawBox(1, 23, 123, 12);
lcd.setColorIndex(0);
lcd.drawStr(3,32, menu_lista[1]);
lcd.setColorIndex(1);
}
}
while (lcd.nextPage());}
if(LIGADO == 4){
if((ANO % 4 == 0) && (ANO % 100 != 0) || (ANO % 400 == 0)){
BISEXTO = 1;
}else BISEXTO = 0;
if(MES < 1){
MES = 12;
}
if(MES > 12){
MES = 1;
}
if((MES == 1 || MES == 3 ||MES == 5||MES == 6||MES == 8||MES == 10||MES == 12)){
if((DIA > 31)){
DIA = 1;
}
if((DIA < 01)){
DIA = 31;
}}
if((MES == 4 || MES == 7 ||MES == 9||MES == 11)){
if((DIA > 30)){
DIA = 1;
}
if((DIA < 01)){
DIA = 30;
}}
if((MES == 2)&&(BISEXTO == 1)){
if((DIA > 29)){
DIA = 1;
}
if((DIA < 01)){
DIA = 29;
}}
if((MES == 2)&&(BISEXTO == 0)){
if((DIA > 28)){
DIA = 1;
}
if((DIA < 01)){
DIA = 28;
}}
if((BE_UP == 1)&&(POS_HOR == 0)){
BE_UP = 0;
if(HOR <=23){
HOR = HOR + 1;}
SAVE();
}
if((BE_DW == 1)&&(POS_HOR == 0)){
BE_DW = 0;
if(HOR >=0){
HOR = HOR - 1;}
SAVE();
}
if((BE_OK == 1)){
POS_HOR++;
}
if((BE_UP == 1)&&(POS_HOR == 1)){
BE_UP = 0;
if(MIN <=59){
MIN = MIN + 1;}
SAVE();
}
if((BE_DW == 1)&&(POS_HOR == 1)){
BE_DW = 0;
if(MIN >=0){
MIN = MIN - 1;}
SAVE();
}
if((BE_UP == 1)&&(POS_HOR == 2)){
BE_UP = 0;
DIA = DIA + 1;
}
if((BE_DW == 1)&&(POS_HOR == 2)){
BE_DW = 0;
DIA = DIA - 1;
}
if((BE_UP == 1)&&(POS_HOR == 3)){
BE_UP = 0;
MES = MES + 1;
}
if((BE_DW == 1)&&(POS_HOR == 3)){
BE_DW = 0;
MES = MES - 1;
}
if((BE_UP == 1)&&(POS_HOR == 4)){
BE_UP = 0;
ANO = ANO + 1;
}
if((BE_DW == 1)&&(POS_HOR == 4)){
BE_DW = 0;
ANO = ANO - 1;
}
if((BE_UP == 1)&&(POS_HOR == 5)&&(FORMATO == 0)){
BE_UP = 0;
FORMATO = 1;
}
if((BE_UP == 1)&&(POS_HOR == 5)&&(FORMATO == 1)){
BE_UP = 0;
FORMATO = 0;
}
if((BE_DW == 1)&&(POS_HOR == 5)&&(FORMATO == 0)){
BE_DW = 0;
FORMATO = 1;}
if((BE_DW == 1)&&(POS_HOR == 5)&&(FORMATO == 1)){
BE_DW = 0;
FORMATO = 0;}
if((POS_HOR == 12)){
POS_HOR = 0;
}
if((BE_UP == 1)&&(POS_HOR == 6)){
BE_UP = 0;
if(HOR_GELO <=23){
HOR_GELO = HOR_GELO + 1;}
}
if((BE_DW == 1)&&(POS_HOR == 6)){
BE_DW = 0;
if(HOR_GELO >=0){
HOR_GELO = HOR_GELO - 1;}
}
if((BE_UP == 1)&&(POS_HOR == 7)){
BE_UP = 0;
if(MIN_GELO <=59){
MIN_GELO = MIN_GELO + 1;}
}
if((BE_DW == 1)&&(POS_HOR == 7)){
BE_DW = 0;
if(MIN_GELO >=0){
MIN_GELO = MIN_GELO - 1;}
}
if((BE_UP == 1)&&(POS_HOR == 8)){
BE_UP = 0;
if(HOR_AGUA_ATIV <=23){
HOR_AGUA_ATIV = HOR_AGUA_ATIV + 1;}
}
if((BE_DW == 1)&&(POS_HOR == 8)){
BE_DW = 0;
if(HOR_AGUA_ATIV >=0){
HOR_AGUA_ATIV = HOR_AGUA_ATIV - 1;}
}
if((BE_UP == 1)&&(POS_HOR == 9)){
BE_UP = 0;
if(MIN_AGUA_ATIV <=59){
MIN_AGUA_ATIV = MIN_AGUA_ATIV + 1;}
}
if((BE_DW == 1)&&(POS_HOR == 9)){
BE_DW = 0;
if(MIN_AGUA_ATIV >=0){
MIN_AGUA_ATIV = MIN_AGUA_ATIV - 1;}
}
if((BE_UP == 1)&&(POS_HOR == 10)){
BE_UP = 0;
if(HOR_AGUA_DESAT <=23){
HOR_AGUA_DESAT = HOR_AGUA_DESAT + 1;}
}
if((BE_DW == 1)&&(POS_HOR == 10)){
BE_DW = 0;
if(HOR_AGUA_DESAT >=0){
HOR_AGUA_DESAT = HOR_AGUA_DESAT - 1;}
}
if((BE_UP == 1)&&(POS_HOR == 11)){
BE_UP = 0;
if(MIN_AGUA_DESAT <=59){
MIN_AGUA_DESAT = MIN_AGUA_DESAT + 1;}
}
if((BE_DW == 1)&&(POS_HOR == 11)){
BE_DW = 0;
if(MIN_AGUA_DESAT >=0){
MIN_AGUA_DESAT = MIN_AGUA_DESAT - 1;}
}
if(HOR == 24){
HOR = 0;}
if(HOR == -1){
HOR = 23;}
if(MIN == 60){
MIN = 0;
SAVE();}
if(MIN == -1){
MIN = 59;
SAVE();}
if(HOR_GELO == 24){
HOR_GELO = 0;}
if(HOR_GELO == -1){
HOR_GELO = 23;}
if(MIN_GELO == 60){
MIN_GELO = 0;}
if(MIN_GELO == -1){
MIN_GELO = 59;}
if(HOR_AGUA_ATIV == 24){
HOR_AGUA_ATIV = 0;}
if(HOR_AGUA_ATIV == -1){
HOR_AGUA_ATIV = 23;}
if(MIN_AGUA_ATIV == 60){
MIN_AGUA_ATIV = 0;}
if(MIN_AGUA_ATIV == -1){
MIN_AGUA_ATIV = 59;}
if(HOR_AGUA_DESAT == 24){
HOR_AGUA_DESAT = 0;}
if(HOR_AGUA_DESAT == -1){
HOR_AGUA_DESAT = 23;}
if(MIN_AGUA_DESAT == 60){
MIN_AGUA_DESAT = 0;}
if(MIN_AGUA_DESAT == -1){
MIN_AGUA_DESAT = 59;}
lcd.firstPage();
do{//Barra lateral posição - define em que posição a barra lateral estará
//Titulo do Menu
if(POS_HOR == 0){
lcd.drawXBMP(17, 12, 5, 3, BT_allArray[7]);
lcd.drawXBMP(17, 24, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 1){
lcd.drawXBMP(33, 12, 5, 3, BT_allArray[7]);
lcd.drawXBMP(33, 24, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 2){
lcd.drawXBMP(48, 12, 5, 3, BT_allArray[7]);
lcd.drawXBMP(48, 24, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 3){
lcd.drawXBMP(66, 12, 5, 3, BT_allArray[7]);
lcd.drawXBMP(66, 24, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 4){
lcd.drawXBMP(90, 12, 5, 3, BT_allArray[7]);
lcd.drawXBMP(90, 24, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 5){
lcd.drawXBMP(111, 12, 5, 3, BT_allArray[7]);
lcd.drawXBMP(111, 24, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 6){
lcd.drawXBMP(5, 39, 5, 3, BT_allArray[7]);
lcd.drawXBMP(5, 51, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 7){
lcd.drawXBMP(21, 39, 5, 3, BT_allArray[7]);
lcd.drawXBMP(21, 51, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 8){
lcd.drawXBMP(45, 39, 5, 3, BT_allArray[7]);
lcd.drawXBMP(45, 51, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 9){
lcd.drawXBMP(61, 39, 5, 3, BT_allArray[7]);
lcd.drawXBMP(61, 51, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 10){
lcd.drawXBMP(95, 39, 5, 3, BT_allArray[7]);
lcd.drawXBMP(95, 51, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 11){
lcd.drawXBMP(111, 39, 5, 3, BT_allArray[7]);
lcd.drawXBMP(111, 51, 5, 3, BT_allArray[8]);
}
lcd.setFont(u8g_font_6x10);
lcd.setColorIndex(1);
lcd.drawBox(0, 0, 128, 11);
lcd.setColorIndex(0);
lcd.drawStr(0,8, menu_titulo[1]);
lcd.setColorIndex(1);
//backgound do Menu
if(FORMATO == 0){
if(HOR<=9){
lcd.drawStr(14,23, "0");
lcd.setCursor(20,23);
lcd.print(HOR, DEC);}
if(HOR>9){
lcd.setCursor(14,23);
lcd.print(HOR, DEC);}
}
if(FORMATO == 1){
if(HOR == 0){
AMPM = 12;}
if((HOR >=1||HOR >=12)){
AMPM = HOR;
}
if((HOR >12)){
AMPM = HOR - 12;
}
if(AMPM<=9){
lcd.drawStr(14,23, "0");
lcd.setCursor(20,23);
lcd.print(AMPM);}
if(AMPM>9){
lcd.setCursor(14,23);
lcd.print(AMPM);}
if(now.hour() <=11){
lcd.drawStr(1,23, "AM");
}
else lcd.drawStr(1,23, "PM");}
lcd.drawStr(25,22, ":");
if(MIN<=9){
lcd.drawStr(30,23, "0");
lcd.setCursor(36,23);
lcd.print(MIN, DEC);}
if(MIN>9){
lcd.setCursor(30,23);
lcd.print(MIN, DEC);}
if(DIA<=9){
lcd.drawStr(45,23, "0");
lcd.setCursor(51,23);
lcd.print(DIA, DEC);}
if(DIA>9){
lcd.setCursor(45,23);
lcd.print(DIA, DEC);}
lcd.drawStr(57,23, "/");
if(MES<=9){
lcd.drawStr(63,23, "0");
lcd.setCursor(69,23);
lcd.print(MES, DEC);}
if(MES>9){
lcd.setCursor(63,23);
lcd.print(MES, DEC);}
lcd.drawStr(75,23, "/");
lcd.setCursor(81,23);
lcd.print(ANO, DEC);
if(FORMATO == 0){
lcd.setCursor(108,23);
lcd.print("24H");}
if(FORMATO == 1){
lcd.setCursor(108,23);
lcd.print("12H");}
lcd.setCursor(2,35);
lcd.print("Gelo Agua ON Agua OFF");
if(HOR_GELO<=9){
lcd.drawStr(2,50, "0");
lcd.setCursor(8,50);
lcd.print(HOR_GELO, DEC);}
if(HOR_GELO>9){
lcd.setCursor(2,50);
lcd.print(HOR_GELO, DEC);}
lcd.drawStr(13,49, ":");
if(MIN_GELO<=9){
lcd.drawStr(18,50, "0");
lcd.setCursor(24,50);
lcd.print(MIN_GELO, DEC);}
if(MIN_GELO>9){
lcd.setCursor(18,50);
lcd.print(MIN_GELO, DEC);}
if(HOR_AGUA_ATIV<=9){
lcd.drawStr(42,50, "0");
lcd.setCursor(48,50);
lcd.print(HOR_AGUA_ATIV, DEC);}
if(HOR_AGUA_ATIV>9){
lcd.setCursor(42,50);
lcd.print(HOR_AGUA_ATIV, DEC);}
lcd.drawStr(53,49, ":");
if(MIN_AGUA_ATIV<=9){
lcd.drawStr(58,50, "0");
lcd.setCursor(64,50);
lcd.print(MIN_AGUA_ATIV, DEC);}
if(MIN_AGUA_ATIV>9){
lcd.setCursor(58,50);
lcd.print(MIN_AGUA_ATIV, DEC);}
if(HOR_AGUA_DESAT<=9){
lcd.drawStr(92,50, "0");
lcd.setCursor(98,50);
lcd.print(HOR_AGUA_DESAT, DEC);}
if(HOR_AGUA_DESAT>9){
lcd.setCursor(92,50);
lcd.print(HOR_AGUA_DESAT, DEC);}
lcd.drawStr(103,49, ":");
if(MIN_AGUA_DESAT<=9){
lcd.drawStr(108,50, "0");
lcd.setCursor(114,50);
lcd.print(MIN_AGUA_DESAT, DEC);}
if(MIN_AGUA_DESAT>9){
lcd.setCursor(108,50);
lcd.print(MIN_AGUA_DESAT, DEC);}
//Barra de fundo
lcd.drawBox(0, 59, 128, 5);
lcd.drawXBMP(17, 60, 5, 3, BT_allArray[0]);
lcd.drawXBMP(62, 60, 2, 3, BT_allArray[3]);
lcd.drawXBMP(103, 60, 5, 3, BT_allArray[1]);
}
while (lcd.nextPage());
}
if(LIGADO == 5){
if(TEMP_AGUA > 8){
TEMP_AGUA = 5;
}
if(TEMP_AGUA < 5){
TEMP_AGUA = 8;
}
if(TEMPO_GELO > 12){
TEMPO_GELO = 8;
}
if(TEMPO_GELO < 8){
TEMPO_GELO = 12;
}
if((BE_UP == 1)&&(POS_HOR == 0)){
BE_UP = 0;
TEMP_AGUA = TEMP_AGUA + 1;
}
if((BE_DW == 1)&&(POS_HOR == 0)){
BE_DW = 0;
TEMP_AGUA = TEMP_AGUA - 1;
}
if((BE_OK == 1)&&(POS_HOR == 0)){
BE_OK = 0;
POS_HOR = 1;
}
if((BE_OK == 1)&&(POS_HOR == 1)){
BE_OK = 0;
POS_HOR = 0;
}
if((BE_UP == 1)&&(POS_HOR == 1)){
BE_UP = 0;
TEMPO_GELO = TEMPO_GELO + 2;
}
if((BE_DW == 1)&&(POS_HOR == 1)){
BE_DW = 0;
TEMPO_GELO = TEMPO_GELO - 2;
}
lcd.firstPage();
do{//Barra lateral posição - define em que posição a barra lateral estará
//Titulo do Menu
if(POS_HOR == 0){
lcd.drawXBMP(110, 20, 5, 3, BT_allArray[7]);
lcd.drawXBMP(110, 25, 5, 3, BT_allArray[8]);
}
if(POS_HOR == 1){
lcd.drawXBMP(110, 45, 5, 3, BT_allArray[7]);
lcd.drawXBMP(110, 50, 5, 3, BT_allArray[8]);
}
lcd.setFont(u8g_font_6x10);
lcd.setColorIndex(1);
lcd.drawBox(0, 0, 128, 11);
lcd.setColorIndex(0);
lcd.drawStr(0,8, menu_titulo[1]);
lcd.setColorIndex(1);
//backgound do Menu
lcd.drawStr(4,26, "Temperatura:");
lcd.setCursor(85,26);
lcd.print(TEMP_AGUA, DEC);
lcd.drawXBMP(93, 19, 9, 7, IMG_allArray[10]);
lcd.drawStr(4,40, "Tamanhho do Gelo:");
if(TEMPO_GELO == 8){
lcd.setCursor(30,52);
lcd.print("Pequeno");}
if(TEMPO_GELO == 10){
lcd.setCursor(42,52);
lcd.print("Medio");}
if(TEMPO_GELO == 12){
lcd.setCursor(36,52);
lcd.print("Grande");}
//Barra de fundo
lcd.drawBox(0, 59, 128, 5);
lcd.drawXBMP(17, 60, 3, 3, BT_allArray[4]);
lcd.drawXBMP(62, 60, 2, 3, BT_allArray[3]);
lcd.drawXBMP(103, 60, 3, 3, BT_allArray[5]);
}
while (lcd.nextPage());}
}