/*Botão para direita, em geral serve para navegar entre as telas
Botão esquerdo serve para seleção dentro dos menus
Botão para cima aciona o alarme
Botão para cima desaciona o alarme(quando há movimento)
Botão para cima confirma o horário de ativação do ar condicionado
Botão para cima na tela que informa "sala:", modifica de ativado para desativado, 1 - ativado, 0 - desativado
Botão para baixo na tela que informa "sala:", modifica de desativado para ativado, 1 - ativado, 0 - desativado
Botão para direita na tela que informa "sala:", troca a posição de escolha para a ativação ou desativação da sala de preferencia
Botão para cima na última tela confirma o alarme
Botão para baixo na última tela desativa o alarme
Botão para cima na config do led aumenta o tempo de ficar ligado
Botão para baixo na config do led diminui o tempo de ficar ligado
*/
#include <LiquidCrystal.h> //bibliotecas
#include <Wire.h> //bibliotecas
#include "RTClib.h" //bibliotecas
#include "DHT.h" //bibliotecas
#define DHTPIN A3
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
RTC_DS1307 rtc;
unsigned long last = 0;
unsigned long Delaybotao = 400;
unsigned long Delaybotao1 = 500;
unsigned long sala1 = 0;
unsigned long sala2 = 0;
unsigned long sala3 = 0;
unsigned long sala4 = 0;
unsigned long desativ = 5000;
unsigned long desligar = 6000;
unsigned long lastclear = 0;
int Hora = 0; // Inicia a variável Hor
int Minuto = 0; // Inicia a variável Min
int Segundo = 0; //inicia variave segundo
int horario = 0;
int horario1 = 0;
int horario2 = 0;
int horario3 = 0;
int nm = 1;
int Hora1 = 0; // Inicia a variável Hor
int Minuto1 = 0; // Inicia a variável Min
int Segundo1 = 0;
int horario4 = 0;
int horario5 = 0;
int horario6 = 0;
int horario7 = 0;
int nm1 = 1;
int alarme = 0;
int inic = 5;
int inic1 = inic+1;
int inic2 = inic+2;
int inic3 = inic+3;
int inic5 = 11;
int inic6 = inic5+1;
int inic7 = inic5+2;
int inic8 = inic5+3;
int inic9 = inic5+4;
int deftemp = 0; //definição da temperatura
int ativacao = 0; //ativação do alarme
int controle = 0; //controle do sistema\
//int movimento1 = 0; //movimento da sala 1
int movimento2 = 0; //movimento da sala 2
int movimento3 = 0; //movimento da sala 3
int movimento4 = 0; //movimento da sala 4
int halarme = 0;
int alarativ = 0;
int sensor1 = 1;
int sensor2 = 1;
int sensor3 = 1;
int sensor4 = 1;
int ledsensor = 0;
int telamaior = 0; //tela sobreposta
int pos = 0;
int tempoled = 10;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
const int backLight = 10;
LiquidCrystal lcd (6,7,2,3,4,5);
void setup (){
pinMode(38, INPUT); //Sensor de movimento 1
pinMode(40, INPUT); //Sensor de movimento 2
pinMode(42, INPUT); //Sensor de movimento 3
pinMode(44, INPUT); //Sensor de movimento 4
pinMode(46, OUTPUT); //LED BRANCO 1
pinMode(48, OUTPUT); //LED BRANCO 2
pinMode(50, OUTPUT); //LED BRANCO 3
pinMode(52, OUTPUT); //LED BRANCO 4
pinMode(24, OUTPUT); //LED VERMELHO
pinMode(26, OUTPUT); //LED VERMELHO
pinMode(28, INPUT); //botão direto, posterior
pinMode(30, INPUT); //botão superior, +(mais)
pinMode(32, INPUT); //botão esquerdo, anterior
pinMode(36, INPUT); //botão inferior, -(menos)
rtc.begin();
dht.begin();
lcd.begin(16,2);
pinMode(13, OUTPUT); //buzzer
}
void led(){ //leds
DateTime now = rtc.now();
float temperature = dht.readTemperature();
if(alarme == 1){
if((Hora == now.hour()) && (Minuto == now.minute()) && (00 == now.second())){
ativacao = 1 ;
halarme = 0;
alarativ = 0;
}
if((Hora1 == now.hour()) && (Minuto1 == now.minute()) && (00 == now.second())){
ativacao = 0;
halarme = 1;
telamaior = 1;
}
if(ativacao == 1 && deftemp<temperature){
digitalWrite(26,1);
}
if(ativacao == 0 || deftemp>=temperature){
digitalWrite(26,0);
}
}
if(ativacao == 1){
if(digitalRead(38) == 1){
digitalWrite(46,1);
sala1 = millis();
}
if((millis()-sala1)>desativ){
digitalWrite(46,0);
}
if(digitalRead(40) == 1){
digitalWrite(48,1);
sala2 = millis();
}
if((millis()-sala2)>desativ){
digitalWrite(48,0);
}
if(digitalRead(42) == 1){
digitalWrite(50,1);
sala3 = millis();
}
if((millis()-sala3)>desativ){
digitalWrite(50,0);
}
if(digitalRead(44) == 1){
digitalWrite(52,1);
sala4 = millis();
}
if((millis()-sala4)>desativ){
digitalWrite(52,0);
}
}
}
void detectar(){
if(alarativ == 1 && halarme == 1){
if(sensor1 == 1){
if(digitalRead(38) == 1){
telamaior = 2;
}
}
if(sensor2 == 1){
if(digitalRead(40) == 1 ){
telamaior = 2;
}
}
if(sensor3 == 1){
if(digitalRead(42) == 1 ){
telamaior = 2;
}
}
if(sensor4 == 1){
if(digitalRead(44) == 1 ){
telamaior = 2;
}
}
}
}
void ligaralarm(){
lcd.setCursor(0,0);
lcd.print("Confimar ");
lcd.setCursor(0,1);
lcd.print("Alarme ");
if(digitalRead(30) == 1){
if((millis()-last) > Delaybotao){
digitalWrite(46,0);
digitalWrite(48,0);
digitalWrite(50,0);
digitalWrite(52,0);
telamaior = 0;
alarativ = 1;
lcd.clear();
last = millis();
}
}
}
void primeiro(){
DateTime now = rtc.now();
if(alarme == 1){
lcd.setCursor(15,1);
lcd.print("A");
led();
}
lcd.setCursor(11,0);
lcd.print("TT:");
float temperature = dht.readTemperature();
lcd.print(temperature);
lcd.setCursor(10,1),
lcd.print("ST:");
lcd.print(deftemp);
lcd.setCursor(0,0);
if (now.day() < 10){
lcd.print('0');
}
lcd.print(now.day(), DEC);
lcd.print('/');
if (now.month() < 10){
lcd.print('0');
}
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.setCursor(0,1);
if (now.hour() < 10){
lcd.print('0');
}
lcd.print(now.hour(), DEC);
lcd.print(':');
if (now.minute() < 10){
lcd.print('0');
}
lcd.print(now.minute(), DEC);
lcd.print(':');
if (now.second() < 10){
lcd.print('0');
}
lcd.print(now.second(), DEC);
}
void disparar(){
lcd.setCursor(0,0);
lcd.print("Sensor");
lcd.setCursor(0,1);
lcd.print("Disparado");
if((millis()-lastclear)> desligar){
lcd.clear();
}
if(sensor1 == 1){
lastclear = millis();
if(digitalRead(38) == 1){
lcd.setCursor(10,0);
lcd.print("1");
ledsensor = 1;
}
}
if(sensor2 == 1){
lastclear = millis();
if(digitalRead(40) == 1){
lcd.setCursor(14,0);
lcd.print("2");
ledsensor = 1;
}
}
if(sensor3 == 1){
lastclear = millis();
if(digitalRead(42) == 1){
lcd.setCursor(10,1);
lcd.print("3");
ledsensor = 1;
}
}
if(sensor4 == 1){
lastclear = millis();
if(digitalRead(44) == 1){
lcd.setCursor(14,1);
lcd.print("4");
ledsensor = 1;
}
}
if(ledsensor == 1){
digitalWrite(24,1);
}
if(digitalRead(30) == 1){
if((millis()-last)>Delaybotao){
ledsensor = 0;
alarativ = 0;
telamaior = 0;
digitalWrite(24,0);
lcd.clear();
last = millis();
}
}
}
void controlalarme(){
lcd.setCursor(0,0);
lcd.print("Sala:");
lcd.setCursor(8,0);
lcd.print(sensor1);
lcd.setCursor(10,0);
lcd.print(sensor2);
lcd.setCursor(12,0);
lcd.print(sensor3);
lcd.setCursor(14,0);
lcd.print(sensor4);
pos = alterar_numero(pos);
if(pos>= 4){
pos = 0;
}
if(pos == 0){
lcd.setCursor(14,1);
lcd.print(" ");
lcd.setCursor(8,1);
lcd.print("-");
sensor1 = somar_subtrair(sensor1);
if(sensor1> 1){
sensor1 = 1;
}
if(sensor1< 0){
sensor1 = 0;
}
}
if(pos == 1){
lcd.setCursor(8,1);
lcd.print(" ");
lcd.setCursor(10,1);
lcd.print("-");
sensor2 = somar_subtrair(sensor2);
if(sensor2> 1){
sensor2 = 1;
}
if(sensor2< 0){
sensor2 = 0;
}
}
if(pos == 2){
lcd.setCursor(10,1);
lcd.print(" ");
lcd.setCursor(12,1);
lcd.print("-");
sensor3 = somar_subtrair(sensor3);
if(sensor3> 1){
sensor3 = 1;
}
if(sensor3< 0){
sensor3 = 0;
}
}
if(pos == 3){
lcd.setCursor(12,1);
lcd.print(" ");
lcd.setCursor(14,1);
lcd.print("-");
sensor4 = somar_subtrair(sensor4);
if(sensor4> 1){
sensor4 = 1;
}
if(sensor4< 0){
sensor4 = 0;
}
}
}
void ativaedest(){
lcd.setCursor(0,0);
lcd.print("Ativa");
lcd.setCursor(0,1);
lcd.print("Alarme ");
if(alarativ == 1){
lcd.setCursor(8,1);
lcd.print("Ativado");
}
if(alarativ == 0){
lcd.setCursor(8,1);
lcd.print(" Desat.");
}
if(digitalRead(30) == 1){
if((millis()-last)> Delaybotao){
alarativ = 1;
last = millis();
}
}
if(digitalRead(36) == 1){
if((millis()-last)> Delaybotao){
alarativ = 0;
last = millis();
}
}
}
void tempo(){
lcd.setCursor(0,0);
lcd.print("Tempo LED");
lcd.setCursor(7,1);
lcd.print(tempoled);
if(tempoled<=9){
lcd.setCursor(8,1);
lcd.print(" ");
}
tempoled = somar_subtrair(tempoled);
if(tempoled<5){
tempoled = 5;
}
desativ = (tempoled - 5)*1000;
}
void alterar_modos(){
if (digitalRead(28) == 1){
lcd.clear();
if((millis()-last)> Delaybotao){
controle++;
last = millis();
}
if(controle>=8){controle=0;}
}
}
int alterar_numero(int g){
if (digitalRead(32) == 1){
if((millis()-last)> Delaybotao){
g++;
last = millis();
}
}
return g;
}
int somar_subtrair(int n) {
if (digitalRead(30) == 1){
if((millis()-last) > Delaybotao){
n++;
last = millis();
}
}
if (digitalRead(36) == 1){
if((millis()-last) > Delaybotao){
n--;
last = millis();
}
}
return n;
}
void alarme1(){
led();
lcd.setCursor(0,0);
lcd.print("Horario");
lcd.setCursor(0,1);
lcd.print("de inicio");
lcd.setCursor(inic5,0);
lcd.print(horario);
lcd.setCursor(inic6,0);
lcd.print(horario1);
lcd.setCursor(inic7,0);
lcd.print(":");
lcd.setCursor(inic8,0);
lcd.print(horario2);
lcd.setCursor(inic9,0);
lcd.print(horario3);
nm = alterar_numero(nm);
if(nm>=5){nm=1;}
if(nm == 1){
lcd.setCursor(inic5,1);
lcd.print("|");
lcd.setCursor(inic9,1);
lcd.print(" ");
horario = somar_subtrair(horario);
if(horario<0){horario=2;}
if(horario>2){horario=0;}
}
if(nm == 2){
lcd.setCursor(inic6,1);
lcd.print("|");
lcd.setCursor(inic6-1,1);
lcd.print(" ");
horario1 = somar_subtrair(horario1);
if(horario == 2){
if(horario1<0){horario1=4;}
if(horario1>4){horario1=0;}
}
if(horario != 2){
if(horario1<0){horario1=9;}
if(horario1>9){horario1=0;}
}
}
if(nm == 3){
lcd.setCursor(inic8,1);
lcd.print("|");
lcd.setCursor(inic8-2,1);
lcd.print(" ");
horario2 = somar_subtrair(horario2);
if(horario2<0){horario2=5;}
if(horario2>5){horario2=0;}
}
if(nm == 4){
lcd.setCursor(inic9,1);
lcd.print("|");
lcd.setCursor(inic9-1,1);
lcd.print(" ");
horario3 = somar_subtrair(horario3);
if(horario3<0){horario3=9;}
if(horario3>9){horario3=0;}
}
}
void alarme2(){
led();
lcd.setCursor(0,0);
lcd.print("Horario");
lcd.setCursor(0,1);
lcd.print("Termino");
lcd.setCursor(inic5,0);
lcd.print(horario4);
lcd.setCursor(inic6,0);
lcd.print(horario5);
lcd.setCursor(inic7,0);
lcd.print(":");
lcd.setCursor(inic8,0);
lcd.print(horario6);
lcd.setCursor(inic9,0);
lcd.print(horario7);
nm1 = alterar_numero(nm1);
if(nm1>=5){nm1=1;}
if(nm1 == 1){
lcd.setCursor(inic5,1);
lcd.print("|");
lcd.setCursor(inic9,1);
lcd.print(" ");
horario4 = somar_subtrair(horario4);
if(horario4<0){horario4=2;}
if(horario4>2){horario4=0;}
}
if(nm1 == 2){
lcd.setCursor(inic6,1);
lcd.print("|");
lcd.setCursor(inic6-1,1);
lcd.print(" ");
horario5 = somar_subtrair(horario5);
if(horario4 == 2){
if(horario5<0){horario5=4;}
if(horario5>4){horario5=0;}
}
if(horario4 != 2){
if(horario5<0){horario5=9;}
if(horario5>9){horario5=0;}
}
}
if(nm1 == 3){
lcd.setCursor(inic8,1);
lcd.print("|");
lcd.setCursor(inic8-2,1);
lcd.print(" ");
horario6 = somar_subtrair(horario6);
if(horario6<0){horario6=5;}
if(horario6>5){horario6=0;}
}
if(nm1 == 4){
lcd.setCursor(inic9,1);
lcd.print("|");
lcd.setCursor(inic9-1,1);
lcd.print(" ");
horario7 = somar_subtrair(horario7);
if(horario7<0){horario7=9;}
if(horario7>9){horario7=0;}
}
}
void settemp(){
lcd.setCursor(0,0);
lcd.print("Set");
lcd.setCursor(0,1);
lcd.print("Temp");
lcd.setCursor(9,0);
lcd.print(deftemp);
lcd.print(' ');
lcd.print("C ");
deftemp = somar_subtrair(deftemp);
}
void confirmacao(){
lcd.setCursor(0,0);
lcd.print("Confirmacao");
lcd.setCursor(0,1);
if (Hora < 10){
lcd.print('0');
}
lcd.print(Hora);
lcd.print(":");
if (Minuto < 10){
lcd.print('0');
}
lcd.print(Minuto);
lcd.print(" ");
if (Hora1 < 10){
lcd.print('0');
}
lcd.print(Hora1);
lcd.print(":");
if (Minuto1 < 10){
lcd.print('0');
}
lcd.print(Minuto1);
lcd.print(" ");
lcd.print(deftemp);
if (digitalRead(30) == 1){
lcd.clear();
if((millis()-last)> Delaybotao){
if(alarme ==0){
alarme++;
Hora1 = (horario4*10)+(horario5);
Minuto1 = (horario6*10)+(horario7);
Hora = (horario*10)+(horario1);
Minuto = (horario2*10)+(horario3);
}
if(alarme==1){
Hora1 = (horario4*10)+(horario5);
Minuto1 = (horario6*10)+(horario7);
Hora = (horario*10)+(horario1);
Minuto = (horario2*10)+(horario3);
}
last = millis();
}
if(alarme>1){alarme=0;}
}
if(alarme == 1){
lcd.setCursor(15,0);
lcd.print("C");
}
}
void loop () {
DateTime now = rtc.now();
led();
detectar();
if(telamaior == 1){
ligaralarm();
}
else if(telamaior == 2){
disparar();
}
else if(controle == 0){
alterar_modos();
primeiro();
}
else if(controle == 1){
alterar_modos();
settemp();
}
else if(controle == 2){
alterar_modos();
alarme1();
}
else if(controle == 3){
alterar_modos();
alarme2();
}
else if(controle == 4){
alterar_modos();
confirmacao();
}
else if(controle == 5){
alterar_modos();
controlalarme();
}
else if(controle == 6){
alterar_modos();
ativaedest();
}
else if(controle == 7){
alterar_modos();
tempo();
}
}