Você está na página 1de 5

// ********************************************************************************

//* Alimentador Automatizado para Felinos (v1.7)


//*
//* Acionamento de um rele em hora e minuto preestabelecidos.
//* HELP PETZ
//* Programador Rafael (02/06/2023).
//*******************************************************************************
//Inclusão de bibliotecas
#include <String>
#include "BluetoothSerial.h"
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars


and 2 line display

//As linhas de codigo a seguir devem ser comentadas, ou descomentadas, de acordo


com o modelo de RTC utilizado (DS1307 ou DS3132)
//RTC_DS1307 rtc; //Objeto rtc da classe DS1307
RTC_DS3231 rtc; //Objeto rtc da classe DS3132

char diasDaSemana[7][12] = {"Domingo", "Segunda", "Terca", "Quarta", "Quinta",


"Sexta", "Sabado"}; //Dias da semana

//Permite inicializar o bluetooth do ESP32

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)


#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

//Objeto que permite inicializar o Bluetooth do ESP32.


BluetoothSerial SerialBT;
//------------------------------------------------------------------

//------------------------------------------------------------------

//------------------------------------------------------------------

//------------------------------------------------------------------
//Lista de variáveis
String dados;
int h_1;
int m_1;
int h_2;
int m_2;
int t_s; //tempo de duração do acionamento em segundos
int rele = 2;
int demosComida1=0;
int demosComida2 = 0;
char entrada; // variável que receberá o dado vindo do aplicativo

int segundos = 60 ;
int flag = 0;
;

//------------------------------------------------------------------
//------------------------------------------------------------------
void setup()
{
Serial.begin(9600); // inicializa a transmissão serial (115200)
SerialBT.begin("HELP_PETZ"); //inicializa a SerialBT (do ESP)
pinMode(rele, OUTPUT); // Define o RELE_01 como saída

lcd.init(); // initialize the lcd


// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Aliment. Auto");
lcd.setCursor(0,1);
lcd.print("HELP PETZ");
delay(2000);

//------------------------------------------------------------------
if (!rtc.begin()) { //Se o RTC nao for inicializado, faz
Serial.println("RTC NAO INICIALIZADO"); //Imprime o texto
while (1); //Trava o programa
}
//rtc.adjust(DateTime(2023, 5, 17, 11, 25, 00)); //Ajusta o tempo do RTC para a
data e hora definida pelo usuario.
delay(100); //100 Milissegundos

//------------------------------------------------------------------
void loop()
{
if (SerialBT.available() > 0) {
dados = SerialBT.readString();
if (dados.startsWith("<")) {
dados.remove(0, 1);
h_1 = (dados.toInt());
dados.remove(0, ((dados.indexOf(",")) + 1));
m_1 = (dados.toInt());
dados.remove(0, ((dados.indexOf(",")) + 1));
h_2 = (dados.toInt());
dados.remove(0, ((dados.indexOf(",")) + 1));
m_2 = (dados.toInt());
dados.remove(0, ((dados.indexOf(",")) + 1));
t_s = (dados.toInt());
dados.remove(0, ((dados.indexOf(">")) + 1));
}
}

DateTime agora = rtc.now(); // Faz a leitura de dados de data e hora


Serial.print("Data: ");
Serial.print(agora.day(), DEC); //Imprime dia
Serial.print('/'); //Imprime barra
Serial.print(agora.month(), DEC); //Imprime mes
Serial.print('/'); //Imprime barra
Serial.print(agora.year(), DEC); //Imprime ano
Serial.print(" / Dia da semana: "); //Imprime texto
Serial.print(diasDaSemana[agora.dayOfTheWeek()]); //Imprime dia da semana
Serial.print(" / Horas: "); //Imprime texto
Serial.print(agora.hour(), DEC); //Imprime hora
Serial.print(':'); //Imprime dois pontos
Serial.print(agora.minute(), DEC); //Imprime os minutos
Serial.print(':'); //Imprime dois pontos
Serial.print(agora.second(), DEC); //Imprime os segundos
Serial.println(); //Quebra de linha

delay(1000); //1 Segundo

//verifica se é o horário da primeira alimentação


if (agora.minute() == m_1 && agora.hour() == h_1 && demosComida1 == 0 ){
flag = 1;

while(flag==1){
digitalWrite(rele,HIGH);
segundos--;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Tempo: ");
lcd.setCursor(0,1);
lcd.print("00:");
if(segundos<10){
lcd.print("0");
}
lcd.print(segundos);
delay(1000);

//Quando zerar o tempo


if(segundos == 0){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("fim");
segundos = 20;
flag = 0;
digitalWrite(rele, LOW);
delay(1000);
}
}
demosComida1 = 1; //altera status da comida1
}
//verifica se é o horário da segunda alimentação
if (agora.minute() == m_2 && agora.hour() == h_2 && demosComida2 == 0 ){
flag = 2;

while(flag==2){
digitalWrite(rele, HIGH);
segundos--;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Tempo: ");
lcd.setCursor(0,1);
lcd.print("00:");
if(segundos<10){
lcd.print("0");
}
lcd.print(segundos);
delay(1000);
//Quando zerar o tempo
if(segundos == 0){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("fim");
segundos = 20;
flag = 0;
digitalWrite(rele, LOW);
delay(1000);

demosComida2 = 1; //altera status da comida2


}
//Imprime o horário da próxima alimentação
if (demosComida1 == 0 || demosComida1 == 1 && demosComida2 == 1 ){
Serial.print("Horário atual: ");

Serial.print("Proxima alimentação: ");


Serial.print(h_1);
Serial.print("h:");
Serial.print(m_1);
Serial.println("min");
Serial.println(" ");
Serial.print(t_s);
Serial.print("s");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Prox.alim: ");
lcd.setCursor(0,1);
lcd.print(h_1);
lcd.print("h:");
lcd.print(m_1);
lcd.println("min");
lcd.println(" ");
delay(2000);
}

if (demosComida1 == 1 && demosComida2 == 0){


Serial.print("Horário atual: ");

Serial.print("Próxima alimentação: ");


Serial.print(h_2);
Serial.print("h:");
Serial.print(m_2);
Serial.println("min");
Serial.println(" ");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Prox.alim: ");
lcd.setCursor(0,1);
lcd.print(h_2);
lcd.print("h:");
lcd.print(m_2);
lcd.println("min");
lcd.println(" ");
delay(2000);
}

//meia noite reseta o status de comida do dia


if (agora.hour() == 0 && agora.minute() == 0){
demosComida1 = 0;
demosComida2 = 0;
}

//atualiza monitor serial


delay (1000);

Você também pode gostar