#include "RTClib.h"
#include <LiquidCrystal.h>
#include "DHT.h"
//o botão preto decrementa, o botão branco incrementa, botão cinza volta tela, botão vermelho avança a tela e
//o botão verde é exclusivo para confirmar(ao ativar uma sala e confirmar, vai para a sala de monitoramento & serve para desligar a sirene)
//os ajustes necessários eram: começar a hora final em 23, a sirene não ser acionada ao clicar no botão branco quando fosse para a tela principal
//apenas aparecer a mensagem se esta ou não ativado, mostrar já de inicio que as salas estão desativadas, e configurar em quais salas o monitoramento seria ativado.
//na salas, ao ativar o botão branco (ele também serve pra desativar), clicar em simular movimento e depois clicar no botão
//verde (é o botão de confirma, ele liga a sirene) e para desligar o Led, clicar no botão preto.
// botão preto esta decrementando corretamente as horas agr.
int cont = 0;
int adjustedhour = 00; //hora ajustada inicial
int adjustedminute = 00; //minuto ajustado inicial
int adjustedhourend = 23; //hora ajustada final
int adjustedminuteend = 00; //minuto ajustado final
int temp = 0;
bool habilita = 0;
int Setpoint = 0;
unsigned long lastButtonPressA1 = 0; //subtrai
unsigned long lastButtonPressA2 = 0; //soma
unsigned long lastButtonPressA3 = 0; //retorna
unsigned long lastButtonPressA0 = 0; //avança
unsigned long lastButtonPressA8 = 0; //variavel específica para o botão verde(alarme)
unsigned long tempoLed1 = 0;
unsigned long tempoLed2 = 0;
unsigned long tempoLed3 = 0;
unsigned long tempoLed4 = 0;
unsigned long debounceDelay = 200;
unsigned long currentMillis = millis();
//partes novas
int a = 5;
//variaveis para mecher com o sensor
int s1 = 0; //variavel para mecher com a sala sensor 1
int s2 = 0; //variavel para o sensor 2
int s3 = 0; //variável para o sensor 3
int s4 = 0; // variavel para o sensor 4
int pirState = 0; // vai detectar movimento nos sensores
int val = 0;
//para mecher com o alarme e ar condicionado
bool alarme = 0;
bool pessoa = 0;
bool sensorAtivo = 0;
bool sensorAtivo2 = 0;
bool sensorAtivo3 = 0;
bool sensorAtivo4 = 0;
RTC_DS1307 rtc;
#define DHTPIN 6
//define os nomes dos pins para melhor compreensão
#define confirma A8
#define sensor4 A7
#define ledS4 23
#define sensor3 A6
#define ledS3 22
#define sensor2 A5
#define ledS2 2
#define sensor1 A4
#define ledS1 3
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
char daysOfTheWeek[7][12] = {"Dom", "Seg", "Ter", "Quar", "Qui", "Sex", "Sab"};
LiquidCrystal lcd_1(12, 11, 10, 9, 8, 7);
void setup () {
pinMode(4, OUTPUT); //led ar condicionado
pinMode(A1, INPUT); //decrementa //desliga alarme
pinMode(A2, INPUT); //incrementa //liga alarme
pinMode(A3, INPUT); //volta tela
pinMode(A0, INPUT); //troca de tela
pinMode(5, OUTPUT); //led alarme
pinMode(3, OUTPUT); // led sensor 1
pinMode(2, OUTPUT); // led sensor 2
pinMode(22, OUTPUT); // led sensor 3
pinMode(23, OUTPUT); // led sensor 4
pinMode(A4, INPUT); // sensor 1
pinMode(A5, INPUT); // sensor 2
pinMode(A6, INPUT); // sensor 3
pinMode(A7, INPUT); // sensor 4
pinMode(A8, INPUT); // botão de acionamento do alarme ao sair a pessoa da sala
Serial.begin(115200);
lcd_1.begin(16, 2);
dht.begin();
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
DateTime now = rtc.now();
adjustedhour = now.hour();
adjustedminute = now.minute();
digitalWrite(ledS1, 1);
digitalWrite(ledS2, 1);
digitalWrite(ledS3, 1);
digitalWrite(ledS4, 1);
}
void loop () {
DateTime now = rtc.now();
float temp = dht.readTemperature();
//configuração do horario do ar condicionado
if (now.hour() > adjustedhour && now.hour() < adjustedhourend){
habilita = 1;
Serial.println("habilita1");
pessoa = 0;
alarme = 0;
}
else if(now.hour() == adjustedhour && now.minute() >= adjustedminute){
habilita = 1;
Serial.println("habilita2");
pessoa = 0;
alarme = 0;
} //são dois else if, portanto ele vai começar no primeiro
else if(now.hour() == adjustedhourend && now.minute() <= adjustedminuteend){ // só vai desligar quando meu minuto atual for maior que meu minuto final
habilita = 1;
Serial.println("habilita3");
pessoa = 0;
alarme = 0;
} else{
habilita = 0;
pessoa = 1;
alarme = 1;
}
//daqui o tempo em que os led brancos ficam ligados após serem configurados DENTRO do horario comercial
if (habilita == 1){ //tela 3
if (Setpoint < temp){
digitalWrite(4,1);
Serial.println("habilita");
}
else{
digitalWrite(4, 0);
}
}
else{
digitalWrite(4, 0);
}
if (habilita == 1 & sensor1 == 1){
digitalWrite(ledS1, 0);
tempoLed1 = millis();
}
if ((millis() - tempoLed1) > (a - 5) * 1000){
digitalWrite(ledS1, 1);
}
if (habilita == 1 & sensor2 == 1){
digitalWrite(ledS2, 0);
tempoLed2 = millis();
}
if ((millis() - tempoLed2) > (a - 5) * 1000){
digitalWrite(ledS2, 1);
}
if (habilita == 1 & sensor3 == 1){
digitalWrite(ledS3, 0);
tempoLed3 = millis();
}
if ((millis() - tempoLed3) > (a - 5) * 1000){
digitalWrite(ledS3, 1);
}
if (habilita == 1 & sensor4 == 1){
digitalWrite(ledS4, 0);
tempoLed4 = millis();
}
if ((millis() - tempoLed4) > (a - 5) * 1000){
digitalWrite(ledS4, 1);
}
//até aqui
if (digitalRead(A0) == 1){ //troca de tela avança
if (millis() - lastButtonPressA0 > debounceDelay)
{
lcd_1.clear();
cont++;
lastButtonPressA0 = millis();
if (cont >= 12 ) cont = 0;
}
while (digitalRead(A0) == 1);
}
if (digitalRead(A3) == 1){ //troca de tela retorna
if (millis() - lastButtonPressA3 > debounceDelay)
{
lcd_1.clear();
cont--;
lastButtonPressA3 = millis();
if (cont < 0) cont = 11;
}
while (digitalRead(A3) == 1);
}
if (habilita == 0 && pessoa == 1){
if (digitalRead(sensor1) == 1 || digitalRead(sensor2) == 1 || digitalRead(sensor3) == 1 || digitalRead(sensor4) == 1)
{
if (digitalRead(confirma) == 1) {
lcd_1.clear();
cont = 20;
digitalWrite(5, 1); // This line is executed
pessoa = 1;
}
}
} else if (digitalRead(sensor1) == 0 || digitalRead(sensor2) == 0 || digitalRead(sensor3) == 0 || digitalRead(sensor4) == 0);
{
}
switch(cont){
case(0):
lcd_1.setCursor(0,0); // tela 1
lcd_1.print(now.day());
lcd_1.print("/");
lcd_1.print(now.month());
lcd_1.print("/");
lcd_1.print(now.year());
lcd_1.setCursor(0,1);
lcd_1.print(daysOfTheWeek[now.dayOfTheWeek()]);
lcd_1.print(" ");
lcd_1.print(now.hour());
lcd_1.print(":");
lcd_1.print(now.minute());
lcd_1.print(":");
lcd_1.print(now.second());
lcd_1.print(" "); //
lcd_1.setCursor(11, 0);
lcd_1.print(temp);
if(digitalRead(A2)== 1){
lcd_1.setCursor(15, 1);
lcd_1.print("A");
lcd_1.print(pessoa);
}
if (digitalRead(A1) == 1){
lcd_1.setCursor(15, 1);
lcd_1.print("D");
lcd_1.print(pessoa);
}
if (digitalRead(confirma)==1){
habilita = 0;
pessoa = 0;
alarme = 1;
digitalWrite (5,1);
} else (digitalRead(confirma)==0);{
digitalWrite (5,0);
}
break;
case(1): // tela 2 //inicio da minha hora
lcd_1.setCursor(0,0); //na linha 0 na primeira coluna
lcd_1.print("h:"); //printo
lcd_1.setCursor(9,0);
lcd_1.print("<inicio");
lcd_1.setCursor(2, 0); //na minha linha 2 ainda na coluna 0
if(adjustedhour < 10) lcd_1.print("0"); // ajusto a hora E printo 0 no final
lcd_1.print(adjustedhour); //printo minha hora ajustada
lcd_1.setCursor(0,1); //na linha 0, coluna 1
lcd_1.print("m:"); //printo m
lcd_1.setCursor(2, 1); //na linha 2, coluna 1
if(adjustedminute < 10) lcd_1.print("0"); //se meus minutos ajustados forem menor que 10, printo 0
lcd_1.print(adjustedminute); //printo oq está acontecendo
if (digitalRead(A2) == 1){
if (millis() - lastButtonPressA2 > debounceDelay){
lastButtonPressA2 = millis();
adjustedhour++;
if (adjustedhour > 23) adjustedhour = 0;
}
}
while (digitalRead(A2) == 1);
if (digitalRead(A1) == 1){
if (millis() - lastButtonPressA1 > debounceDelay){
lastButtonPressA1 = millis();
adjustedhour--;
if(adjustedhour < 0) adjustedhour = 0;
}
while (digitalRead(A1) == 1);
}
break;
case(2): //inicio do meu minuto em que:
lcd_1.setCursor(0,0); //na linha 0 na primeira coluna
lcd_1.print("h:"); //printo h
lcd_1.setCursor(2, 0); //na minha linha 2 ainda na coluna 0
if(adjustedhour < 10) lcd_1.print("0"); // ajusto a hora E printo 0 no final como medida preventiva
lcd_1.print(adjustedhour); //printo minha hora ajustada.
lcd_1.setCursor(0,1); //na linha 0, coluna 1
lcd_1.print("m:"); //printo
lcd_1.setCursor(9, 1);
lcd_1.print("<inicio");
lcd_1.setCursor(2, 1); //na linha 2, coluna 1
if(adjustedminute < 10) lcd_1.print("0"); //se meus minutos ajustados forem menor que 10, printo 0
lcd_1.print(adjustedminute); //printo oq está acontecendo
if (digitalRead(A2) == 1){
if (millis() - lastButtonPressA2 > debounceDelay){
adjustedminute++;
if (adjustedminute > 59) adjustedminute = 0;
}
lastButtonPressA2 = millis();
}
while (digitalRead(A2) == 1);
if (digitalRead(A1)==1){
if(millis() - lastButtonPressA1 > debounceDelay){
adjustedminute--;
if (adjustedminute < 0) adjustedminute = 0;
}
lastButtonPressA1 = millis();
}
while (digitalRead(A1) == 1);
break;
case(3): //fim da minha hora
lcd_1.setCursor(0,0); //na linha 0 na primeira coluna
lcd_1.print("h:"); //printo
lcd_1.setCursor(11,0);
lcd_1.print("<fim");
lcd_1.setCursor(2, 0); //na minha linha 2 ainda na coluna 0
if(adjustedhourend < 10) lcd_1.print("0"); // ajusto a hora E printo 0 no final
lcd_1.print(adjustedhourend); //printo minha hora ajustada
lcd_1.setCursor(0,1); //na linha 0, coluna 1
lcd_1.print("m:"); //printo m
lcd_1.setCursor(2, 1); //na linha 2, coluna 1
if(adjustedminuteend < 10) lcd_1.print("0"); //se meus minutos ajustados forem menor que 10, printo 0
lcd_1.print(adjustedminuteend); //printo oq está acontecendo
if (digitalRead(A2) == 1){
if (millis() - lastButtonPressA2 > debounceDelay){
lastButtonPressA2 = millis();
adjustedhourend++;
if (adjustedhourend > 23) adjustedhourend = 0;
}
}
while (digitalRead(A2) == 1);
if (digitalRead(A1) == 1){
if (millis() - lastButtonPressA1 > debounceDelay){
lastButtonPressA1 = millis();
adjustedhourend--;
if(adjustedhourend < 0) adjustedhourend = 23;
}
while (digitalRead(A1) == 1);
}
break;
case(4): //fim do meu minuto
lcd_1.setCursor(0,0); //na linha 0 na primeira coluna
lcd_1.print("h:"); //printo h
lcd_1.setCursor(2, 0); //na minha linha 2 ainda na coluna 0
if(adjustedhourend < 10) lcd_1.print("0"); // ajusto a hora E printo 0 no final como medida preventiva
lcd_1.print(adjustedhourend); //printo minha hora ajustada.
lcd_1.setCursor(0,1); //na linha 0, coluna 1
lcd_1.print("m:"); //printo
lcd_1.setCursor(11, 1);
lcd_1.print("<fim");
lcd_1.setCursor(2, 1); //na linha 2, coluna 1
if(adjustedminuteend < 10) lcd_1.print("0"); //se meus minutos ajustados forem menor que 10, printo 0
lcd_1.print(adjustedminuteend); //printo oq está acontecendo
if (digitalRead(A2) == 1){
if (millis() - lastButtonPressA2 > debounceDelay){
lastButtonPressA2 = millis();
adjustedminuteend++;
if (adjustedminuteend > 59) adjustedminuteend = 0;
}
}
while (digitalRead(A2) == 1);
if (digitalRead(A1)==1){
if(millis() - lastButtonPressA1 > debounceDelay){
lastButtonPressA1 = millis();
adjustedminuteend--;
if (adjustedminuteend < 0) adjustedminuteend = 0;
}
}
while (digitalRead(A1) == 1);
break;
case(5):
lcd_1.setCursor(0,0);
lcd_1.print("Setpoint:");
if (Setpoint < 10) lcd_1.print("0");
lcd_1.print(Setpoint);
lcd_1.setCursor(0,1);
lcd_1.print("Temp:");
lcd_1.print(temp);
if (digitalRead(A2)==1){
if (millis() - lastButtonPressA2 > debounceDelay){
lastButtonPressA2 = millis();
Setpoint++;
if (Setpoint > 35) Setpoint = 0;
}
}
if (digitalRead(A1) == 1){
if (millis() - lastButtonPressA1 > debounceDelay){
lastButtonPressA1 = millis();
Setpoint--;
if (Setpoint < 0) Setpoint = 0;
}
}
break;
case(6):
lcd_1.setCursor(5,0); //pessoa
lcd_1.print("ALARME");
lcd_1.setCursor(7,1);
lcd_1.print("off");
if (digitalRead(A2)==1){ //se meu botão A2 for pressionado
alarme = 1; //meu alarme será ligado
lcd_1.setCursor(7,1);
lcd_1.print("ON ");
cont = 0;
lcd_1.clear();
debounceDelay = 1;
} else if (digitalRead(A1)==1){
alarme = 0; // meu alarme é igual a zero
lcd_1.setCursor(7,1);
lcd_1.print("OFF");
}
break;
case(7):
lcd_1.setCursor(1,0);
lcd_1.print("Tempo sensores");
lcd_1.setCursor(7,1);
if (a < 10) lcd_1.print("0");
lcd_1.print(a);
if (digitalRead(A2) == 1){
if (millis() - lastButtonPressA2 > debounceDelay){
lastButtonPressA2 = millis();
a++;
if (a > 59) a = 5;
}
}
if (digitalRead(A1) == 1){
if (millis() - lastButtonPressA1 > debounceDelay){
lastButtonPressA1 = millis();
a--;
if (a < 5) a = 5;
}
}
break;
//A2 (botão branco), tanto ativa quanto desativa no case das salas (8,9,10 e 11)
case(8):
lcd_1.setCursor(0,0);
lcd_1.print("Sala 1:");
if (digitalRead(A2) == 1) {
sensorAtivo = !sensorAtivo;
}
if (sensorAtivo == 1){
lcd_1.setCursor(0,1);
lcd_1.print("Ativado ");
} else {
lcd_1.setCursor(0,1);
lcd_1.print("Desativado");
}
if (digitalRead(A2) == 1) { // Botão branco altera o estado
if (millis() - lastButtonPressA2 > debounceDelay) {
lastButtonPressA2 = millis();
sensorAtivo = !sensorAtivo; // Alterna entre ativado/desativado
digitalWrite(ledS1, 1);
if (digitalRead(confirma) == 1){
digitalWrite(5,1);
}
}
}
break;
case(9):
lcd_1.setCursor(0,0);
lcd_1.print("Sala 2:");
if (digitalRead(A2) == 1){
sensorAtivo2 = !sensorAtivo2;
}
if (sensorAtivo2 == 1) {
lcd_1.setCursor(0,1);
lcd_1.print("Ativado ");
} else {
lcd_1.setCursor(0,1);
lcd_1.print("Desativado");
}
if (digitalRead(A2) == 1) {
if (millis() - lastButtonPressA2 > debounceDelay) {
lastButtonPressA2 = millis();
sensorAtivo2 = !sensorAtivo2;
digitalWrite(ledS2,1);
if (digitalRead(confirma)==1){
digitalWrite(5,1);
}
}
}
break;
case(10):
lcd_1.setCursor(0,0);
lcd_1.print("Sala 3:");
if (digitalRead(A2) == 1){
sensorAtivo3 = !sensorAtivo3;
}
if (sensorAtivo3 == 1){
lcd_1.setCursor(0,1);
lcd_1.print("Ativado ");
} else {
lcd_1.setCursor(0,1);
lcd_1.print("Desativado");
}
if (digitalRead(A2) == 1) {
if (millis() - lastButtonPressA2 > debounceDelay) {
lastButtonPressA2 = millis();
sensorAtivo3 = !sensorAtivo3;
digitalWrite(ledS3, 1);
if (digitalRead(confirma)==1){
digitalWrite (5,1);
}
}
}
break;
case(11):
lcd_1.setCursor(0,0);
lcd_1.print("Sala 4:");
if (digitalRead(A2) == 1){
sensorAtivo4 = !sensorAtivo4;
}
if (sensorAtivo4 == 1){
lcd_1.setCursor(0,1);
lcd_1.print("Ativado ");
} else {
lcd_1.setCursor(0,1);
lcd_1.print("Desativado");
}
if (digitalRead(A2) == 1) {
if (millis() - lastButtonPressA2 > debounceDelay) {
lastButtonPressA2 = millis();
sensorAtivo4 = !sensorAtivo4;
digitalWrite (ledS4, 1);
if (digitalRead(confirma)==1){
digitalWrite (5,1);
}
}
}
break;
case(20):
lcd_1.setCursor(0,0);
lcd_1.print("Movimento em:");
if (digitalRead(confirma) == 1){
digitalWrite(5,1);
} if (digitalRead(A1)==1){
digitalWrite(5,0);
}
if (digitalRead(sensor1) == 1) {
if (sensorAtivo){
lcd_1.setCursor(0, 1);
lcd_1.print("S1!");
Serial.println("S1");
}} else if (digitalRead(sensor2) == 1) {
if (sensorAtivo2){
lcd_1.setCursor(3, 1);
lcd_1.print("S2!");
Serial.println("S2!");
} } else if (digitalRead(sensor3) == 1){
if (sensorAtivo3){
lcd_1.setCursor(6, 1);
lcd_1.print("S3!");
Serial.println("S3");
}} else if (digitalRead(sensor4)==1) {
if (sensorAtivo4){
lcd_1.setCursor(9, 1);
lcd_1.print("S4!");
Serial.println("S4");
}}
else {
lcd_1.setCursor(0,1);
lcd_1.print(" ");
digitalWrite(ledS1, 1);
digitalWrite(ledS2, 1);
digitalWrite(ledS3, 1);
digitalWrite(ledS4, 1);
}
break;
}
//nessa parte quando o sensor 1 for acionado, tempoLed1 irá guardar a informação
//configurada no tempo em que o led fica ligado, se o tempo for maior que a informação configurada - 5, irá * por 1000 segundos
if (digitalRead(sensor1) == 1){
digitalWrite(ledS1, 0);
tempoLed1 = millis();
}
if ((millis() - tempoLed1) > (a - 5) * 1000){
digitalWrite(ledS1, 1);
}
//nessa parte quando o sensor 2 for acionado, tempoLed2 irá guardar a informação
//configurada no tempo em que o led fica ligado, se o tempo for maior que a informação configurada - 5, irá * por 1000 segundos
if (digitalRead(sensor2) == 1){
digitalWrite(ledS2, 0);
tempoLed2 = millis();
}
if ((millis() - tempoLed2) > (a - 5) * 1000){
digitalWrite(ledS2, 1);
}
//nessa parte quando o sensor 3 for acionado, tempoLed3 irá guardar a informação
//configurada no tempo em que o led fica ligado, se o tempo for maior que a informação configurada - 5, irá * por 1000 segundos
if (digitalRead(sensor3) == 1){
digitalWrite(ledS3, 0);
tempoLed3 = millis();
}
if ((millis() - tempoLed3) > (a - 5) * 1000){
digitalWrite(ledS3, 1);
}
//nessa parte quando o sensor 4 for acionado, tempoLed4 irá guardar a informação
//configurada no tempo em que o led fica ligado, se o tempo for maior que a informação configurada - 5, irá * por 1000 segundos
if (digitalRead(sensor4) == 1){
digitalWrite(ledS4, 0);
tempoLed4 = millis();
}
if ((millis() - tempoLed4) > (a - 5) * 1000){
digitalWrite(ledS4, 1);
}
}