#include <Wire.h>
#include <RTClib.h>
#include <Button.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
//#include <IRremote.hpp>
#define Type DHT11
int ValBot;
int Qpin[4] = { 6, 7, 8, 9 };
bool Q[4];
int dht = 52;
int buzzpin = 53;
int relepin = 11;
bool buzz = false;
bool titilar = true;
bool rele = true;
bool rele2 = false;
bool alarma = false;
bool al = true;
bool diaal2[7] = { false, true, true, true, true, true, false };
int dia2 = 1;
int freq = 200;
float humedad;
float temperatura;
int temp1;
int linSec = 10;
int linMin = 7;
int linHor = 5;
int dia = 1;
int hora = 6;
int min = 30;
int menu = 0;
int menu2 = 0;
bool lcd1 = true;
int sensimp = 3;
bool ender = true;
bool arty = false;
int buzzpinImp = 7;
int volbuzzer = 0;
int volbuzzerlcd = 100;
bool pausa = false;
bool temp = false;
int horatemp = 0;
int mintemp = 1;
int segtemp = 0;
int sel = 0;
int h = 25;
bool ruido = false;
int buzzerRuido;
int IRpin = A5;
int pinarriba = 43;
int pinabajo = 47;
int pinderecha = 41;
int pinizquierda = 49;
int pinenter = 45;
int botones[]{ 0, 37, 33, 44, 48, 39, 35, 0, 46 };
DHT HT(dht, Type);
Button izq(pinizquierda);
Button der(pinderecha);
Button arr(pinarriba);
Button abj(pinabajo);
Button enter(pinenter);
Button suich(10);
Button b1(botones[1]); //luz
Button b2(botones[2]);
Button b3(botones[3]);
Button b4(botones[4]); //temp
Button b5(botones[5]);
Button b6(botones[6]);
Button b7(botones[7]);
Button b8(botones[8]);
Button ender1(52); //ender
Button arty1(35); //artillery
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS3231 rtc;
void setup() {
lcd.clear();
lcd.backlight();
lcd.init();
izq.begin();
der.begin();
arr.begin();
abj.begin();
enter.begin();
suich.begin();
b1.begin();
ender1.begin();
arty1.begin();
b4.begin();
// b5.begin();
// b6.begin();
// b7.begin();
// b8.begin();
//IrReceiver.begin(IRpin);
rtc.begin();
//rtc.adjust(DateTime(__DATE__, __TIME__));
HT.begin();
Serial.begin(9600);
pinMode(pinizquierda, OUTPUT);
pinMode(pinarriba, OUTPUT);
pinMode(pinabajo, OUTPUT);
pinMode(pinenter, OUTPUT);
pinMode(pinderecha, OUTPUT);
pinMode(botones[1,2,3,4,5,6,7], OUTPUT);
pinMode(52, OUTPUT);
pinMode(13, OUTPUT);
pinMode(buzzpin, OUTPUT);
pinMode(relepin, OUTPUT);
pinMode(buzzpinImp, OUTPUT);
}
void decode() {
/*
Q[0] = digitalRead(Qpin[0]);
Q[1] = digitalRead(Qpin[1]);
Q[2] = digitalRead(Qpin[2]);
Q[3] = digitalRead(Qpin[3]);
Serial.println("Ingresa el valor binario");
while (Serial.available() == 0) {
}
Q[3] = Serial.parseInt();
Serial.print(Q[3]);
while (Serial.available() == 0) {
}
Q[2] = Serial.parseInt();
Serial.print(Q[2]);
while (Serial.available() == 0) {
}
Q[1] = Serial.parseInt();
Serial.print(Q[1]);
while (Serial.available() == 0) {
};
Q[0] = Serial.parseInt();
Serial.println(Q[0]);
ValBot = (Q[0] + Q[1] * 2 + Q[2] * 4 + Q[3] * 8);
ValBot = Serial.parseInt();
Serial.print("Valbot = ");
Serial.println(ValBot);*/
}
void buzzertitilar() {
if (ruido == true) {
digitalWrite(buzzpin, 1);
delay(h);
digitalWrite(buzzpin, 0);
}
}
void arriba() {
decode();
if ((arr.pressed() && lcd1 == true) || ValBot == 1) {
Serial.println("arriba");
ValBot = 0;
menu2--;
lcd.clear();
buzzertitilar();
}
}
void abajo() {
decode();
if (abj.pressed() && lcd1 == true || ValBot == 2) {
ValBot = 0;
menu2++;
lcd.clear();
buzzertitilar();
}
}
void izquierda() {
decode();
if (izq.pressed() && lcd1 == true || ValBot == 4) {
ValBot = 0;
menu--;
lcd.clear();
buzzertitilar();
}
}
void derecha() {
decode();
if (der.pressed() && lcd1 == true || ValBot == 3) {
ValBot = 0;
menu++;
lcd.clear();
buzzertitilar();
}
}
void printTiempo() {
if (mintemp < 10) {
linMin = 4;
lcd.setCursor(7, 0);
lcd.print("0");
} else {
linMin = 3;
}
if (horatemp < 10) {
linHor = 1;
lcd.setCursor(4, 0);
lcd.print("0");
} else {
linHor = 0;
}
if (segtemp < 10) {
linSec = 7;
lcd.setCursor(10, 0);
lcd.print("0");
} else {
linSec = 6;
}
lcd.setCursor(linHor + 4, 0);
lcd.print(horatemp);
lcd.setCursor(6, 0);
lcd.print(":");
lcd.setCursor(linMin + 4, 0);
lcd.print(mintemp);
lcd.setCursor(9, 0);
lcd.print(":");
lcd.setCursor(linSec + 4, 0);
lcd.print(segtemp);
}
void temporizador() {
while (temp == true) {
printTiempo();
if (segtemp == 0) {
delay(1000);
//Minutos
if (mintemp != 0) {
mintemp--;
segtemp = 59;
}
//Horas
if (mintemp == 0 && horatemp != 0 && segtemp == 0) {
horatemp--;
mintemp = 59;
segtemp = 59;
}
}
printTiempo();
delay(1000);
if (pausa == false) {
segtemp--;
lcd.clear();
}
if (enter.pressed()) {
pausa = !pausa;
}
if (b4.pressed()) {
temp = false;
}
if (horatemp == 0 && mintemp == 0 && segtemp == 0) {
lcd.setCursor(2, 0);
lcd.print("TIEMPOOOOOOO");
lcd.setCursor(4, 1);
lcd.print("pipipipi");
for (int b = 0; b < 5000; b++) {
temp = false;
if (enter.pressed()) {
horatemp = 0;
mintemp = 0;
segtemp = 0;
lcd.clear();
break;
}
digitalWrite(buzzpin, 1);
delay(100);
digitalWrite(buzzpin, 0);
delay(100);
}
}
}
}
void loop() {
while (menu == 0 && menu2 == 0) {
//rtc.adjust(DateTime(__DATE__, __TIME__));
// while (IrReceiver.decode() == 0) {}
// Serial.println(IrReceiver.decodedIRData.command);
// IrReceiver.resume();
DateTime fecha = rtc.now();
temp1 = round(HT.readTemperature());
Serial.println(arr.read());
if (fecha.minute() < 10) {
linMin = 4;
lcd.setCursor(3, 1);
lcd.print("0");
} else {
linMin = 3;
}
if (fecha.hour() < 10) {
linHor = 1;
lcd.setCursor(0, 1);
lcd.print("0");
} else {
linHor = 0;
}
if (fecha.second() < 10) {
linSec = 7;
lcd.setCursor(6, 1);
lcd.print("0");
} else {
linSec = 6;
}
switch (dia) {
case 1:
lcd.setCursor(0, 0);
lcd.print("Domingo");
break;
case 2:
lcd.setCursor(0, 0);
lcd.print("Lunes");
break;
case 3:
lcd.setCursor(0, 0);
lcd.print("Martes");
break;
case 4:
lcd.setCursor(0, 0);
lcd.print("Miercoles");
break;
case 5:
lcd.setCursor(0, 0);
lcd.print("Jueves");
break;
case 6:
lcd.setCursor(0, 0);
lcd.print("Viernes");
break;
case 7:
lcd.setCursor(0, 0);
lcd.print("Sabado");
break;
}
lcd.setCursor(13, 0);
lcd.print(temp1);
lcd.setCursor(15, 0);
lcd.print("c");
lcd.setCursor(13, 1);
lcd.print(HT.readHumidity());
lcd.setCursor(15, 1);
lcd.print("%");
lcd.setCursor(linHor, 1);
lcd.print(fecha.hour());
lcd.setCursor(2, 1);
lcd.print(":");
lcd.setCursor(linMin, 1);
lcd.print(fecha.minute());
lcd.setCursor(5, 1);
lcd.print(":");
lcd.setCursor(linSec, 1);
lcd.print(fecha.second());
if ((ender1.read() == 0 && ender == true) || (arty1.read() == 0 && arty == true)) {
analogWrite(buzzpinImp, volbuzzer);
} else {
analogWrite(buzzpinImp, 0);
}
if (suich.pressed()) {
lcd.noDisplay();
lcd.noBacklight();
lcd1 = false;
}
if (suich.released()) {
lcd.display();
lcd.backlight();
lcd1 = true;
}
if (b1.pressed()) {
digitalWrite(relepin, rele2);
rele2 = !rele2;
}
if (b4.pressed()) {
lcd.clear();
temp = true;
}
if (temp == true) {
lcd.clear();
}
temporizador();
//Alarma
if (enter.pressed()) {
alarma = true;
}
if (fecha.hour() == hora && fecha.minute() == min && fecha.second() == 0 && al == true && ((diaal2[0] == true && dia == 1) || (diaal2[1] == true && dia == 2) || (diaal2[2] == true && dia == 3) || (diaal2[3] == true && dia == 4) || (diaal2[4] == true && dia == 5) || (diaal2[5] == true && dia == 6) || (diaal2[6] == true && dia == 7))) {
alarma = true;
}
if (alarma == true) {
if (rele == true) {
if (buzz == false) {
digitalWrite(relepin, rele2);
rele2 = !rele2;
delay(1000);
alarma = false;
}
if (buzz == true) {
digitalWrite(relepin, rele2);
rele2 = !rele2;
}
if (buzz == true) {
if (titilar == true) {
for (int a = 0; a < 100; a++) {
if (enter.pressed()) {
alarma = false;
break;
}
digitalWrite(buzzpin, 1);
delay(freq);
digitalWrite(buzzpin, 0);
delay(freq);
}
}
while (titilar == false) {
digitalWrite(buzzpin, 1);
if (enter.pressed()) {
digitalWrite(buzzpin, 0);
alarma = false;
break;
}
}
}
}
}
if (fecha.second() == 59 && fecha.hour() != 23) {
delay(1000);
lcd.clear();
}
if (fecha.hour() == 23 && fecha.minute() == 59 && fecha.second() == 59) {
delay(1000);
dia++;
if(dia == 8){
dia = 1;
}
lcd.clear();
}
arriba();
abajo();
derecha();
}
//Dia
while (menu == 0 && menu2 == 1) {
lcd.setCursor(0, 0);
lcd.print("Dia:");
switch (dia) {
case 1:
lcd.setCursor(0, 1);
lcd.print("Domingo");
break;
case 2:
lcd.setCursor(0, 1);
lcd.print("Lunes");
break;
case 3:
lcd.setCursor(0, 1);
lcd.print("Martes");
break;
case 4:
lcd.setCursor(0, 1);
lcd.print("Miercoles");
break;
case 5:
lcd.setCursor(0, 1);
lcd.print("Jueves");
break;
case 6:
lcd.setCursor(0, 1);
lcd.print("Viernes");
break;
case 7:
lcd.setCursor(0, 1);
lcd.print("Sabado");
break;
}
if (der.pressed()) {
dia++;
lcd.clear();
}
if (izq.pressed()) {
dia--;
lcd.clear();
}
if (dia > 7) {
dia = 1;
}
if (dia < 1) {
dia = 7;
}
arriba();
abajo();
}
//Sonido
while (menu == 0 && menu2 == 2) {
lcd.setCursor(0, 0);
lcd.print("Sonido al pulsar:");
if (enter.pressed()) {
ruido = !ruido;
}
if (ruido == true) {
lcd.setCursor(0, 1);
lcd.print("Si");
} else {
lcd.setCursor(0, 1);
lcd.print("No");
}
arriba();
}
//Temporizador
while (menu == 0 && menu2 == -1) {
while (sel == 0 && menu2 == -1) {
lcd.setCursor(0, 0);
lcd.print("Temporizador:");
lcd.setCursor(0, 1);
lcd.print("Horas:");
lcd.setCursor(7, 1);
lcd.print(horatemp);
if (der.pressed() && horatemp != 24) {
horatemp++;
}
if (izq.pressed() && horatemp != 0) {
horatemp--;
}
if (arr.pressed() && (horatemp != 0 || mintemp != 0 || segtemp != 0)) {
menu2++;
temp = true;
lcd.clear();
}
if (enter.pressed()) {
sel++;
}
abajo();
}
while (sel == 1 && menu2 == -1) {
lcd.setCursor(0, 0);
lcd.print("Temporizador:");
lcd.setCursor(0, 1);
lcd.print("Minutos:");
lcd.setCursor(9, 1);
lcd.print(mintemp);
if (der.pressed() && mintemp != 60) {
lcd.clear();
mintemp = mintemp + 5;
}
if (izq.pressed() && mintemp != 00) {
mintemp = mintemp - 5;
}
if (arr.pressed() && (horatemp != 0 || mintemp != 0 || segtemp != 0)) {
menu2++;
temp = true;
lcd.clear();
}
if (enter.pressed()) {
sel++;
lcd.clear();
}
abajo();
}
while (sel == 2 && menu2 == -1) {
lcd.setCursor(0, 0);
lcd.print("Temporizador:");
lcd.setCursor(0, 1);
lcd.print("Segundos:");
lcd.setCursor(10, 1);
lcd.print(segtemp);
if (der.pressed() && segtemp != 60) {
segtemp = segtemp + 10;
lcd.clear();
}
if (izq.pressed() && segtemp != 0) {
segtemp = segtemp - 10;
lcd.clear();
}
if (arr.pressed() && (horatemp != 0 || mintemp != 0 || segtemp != 0)) {
menu2++;
temp = true;
lcd.clear();
}
if (enter.pressed()) {
sel = 0;
lcd.clear();
}
abajo();
}
}
//Menu Luz
while (menu == 1 && menu2 == 0) {
lcd.setCursor(0, 0);
lcd.print("Luz+Alarma");
if (al == false) {
lcd.setCursor(0, 1);
lcd.print("No");
} else {
lcd.setCursor(0, 1);
lcd.print("Si");
}
if (enter.pressed()) {
al = !al;
lcd.clear();
}
if (suich.pressed()) {
lcd.noDisplay();
lcd.noBacklight();
lcd1 = false;
menu = 0;
menu2 = 0;
lcd.clear();
}
derecha();
abajo();
izquierda();
}
//Menu Set Time
while (menu == 1 && menu2 == 1) {
if (der.pressed()) {
min = min + 30;
}
if (enter.pressed()) {
min = min + 1;
}
if (izq.pressed()) {
min = min - 30;
}
if (min == 60) {
hora++;
min = 0;
}
if (hora == 24) {
hora = 0;
min = 0;
}
if (min == -30) {
hora--;
min = 30;
}
lcd.setCursor(0, 0);
lcd.print("Hora:");
lcd.setCursor(0, 1);
lcd.print(hora);
lcd.setCursor(2, 1);
lcd.print(":");
lcd.setCursor(3, 1);
lcd.print(min);
if (suich.pressed()) {
lcd.noDisplay();
lcd.noBacklight();
lcd1 = false;
menu = 0;
menu2 = 0;
lcd.clear();
}
arriba();
abajo();
}
//Menu dias
while (menu == 1 && menu2 == 2) {
lcd.setCursor(0, 0);
lcd.print("Dias:");
switch (dia2) {
case 1:
lcd.setCursor(0, 1);
lcd.print("Domingo");
if (diaal2[0] == false) {
lcd.setCursor(10, 1);
lcd.print("No");
} else {
lcd.setCursor(10, 1);
lcd.print("Si");
}
if (enter.pressed()) {
diaal2[0] = !diaal2[0];
}
break;
case 2:
lcd.setCursor(0, 1);
lcd.print("Lunes");
if (diaal2[1] == false) {
lcd.setCursor(10, 1);
lcd.print("No");
} else {
lcd.setCursor(10, 1);
lcd.print("Si");
}
if (enter.pressed()) {
diaal2[1] = !diaal2[1];
}
break;
case 3:
lcd.setCursor(0, 1);
lcd.print("Martes");
if (diaal2[2] == false) {
lcd.setCursor(10, 1);
lcd.print("No");
} else {
lcd.setCursor(10, 1);
lcd.print("Si");
}
if (enter.pressed()) {
diaal2[2] = !diaal2[2];
}
break;
case 4:
lcd.setCursor(0, 1);
lcd.print("Miercoles");
if (diaal2[3] == false) {
lcd.setCursor(10, 1);
lcd.print("No");
} else {
lcd.setCursor(10, 1);
lcd.print("Si");
}
if (enter.pressed()) {
diaal2[3] = !diaal2[3];
}
break;
case 5:
lcd.setCursor(0, 1);
lcd.print("Jueves");
if (diaal2[4] == false) {
lcd.setCursor(10, 1);
lcd.print("No");
} else {
lcd.setCursor(10, 1);
lcd.print("Si");
}
if (enter.pressed()) {
diaal2[4] = !diaal2[4];
}
break;
case 6:
lcd.setCursor(0, 1);
lcd.print("Viernes");
if (diaal2[5] == false) {
lcd.setCursor(10, 1);
lcd.print("No");
} else {
lcd.setCursor(10, 1);
lcd.print("Si");
}
if (enter.pressed()) {
diaal2[5] = !diaal2[5];
}
break;
case 7:
lcd.setCursor(0, 1);
lcd.print("Sabado");
if (diaal2[6] == false) {
lcd.setCursor(10, 1);
lcd.print("No");
} else {
lcd.setCursor(10, 1);
lcd.print("Si");
}
if (enter.pressed()) {
diaal2[6] = !diaal2[6];
}
break;
}
if (der.pressed()) {
dia2++;
lcd.clear();
}
if (izq.pressed()) {
dia2--;
lcd.clear();
}
if (dia2 > 7) {
dia2 = 1;
}
if (dia2 < 1) {
dia2 = 7;
}
arriba();
abajo();
}
//Menu rele
while (menu == 1 && menu2 == 3) {
lcd.setCursor(0, 0);
lcd.print("Luz?");
if (rele == false) {
lcd.setCursor(0, 1);
lcd.print("No");
} else {
lcd.setCursor(0, 1);
lcd.print("Si");
}
if (enter.pressed()) {
rele = !rele;
}
if (suich.pressed()) {
lcd.noDisplay();
lcd.noBacklight();
lcd1 = false;
menu = 0;
menu2 = 0;
lcd.clear();
}
arriba();
abajo();
}
//Menu Buzzer
while (menu == 1 && menu2 == 4) {
lcd.setCursor(0, 0);
lcd.print("buzzer?");
if (buzz == false) {
lcd.setCursor(0, 1);
lcd.print("No");
} else {
lcd.setCursor(0, 1);
lcd.print("Si");
}
if (enter.pressed()) {
buzz = !buzz;
}
if (suich.pressed()) {
lcd.noDisplay();
lcd.noBacklight();
lcd1 = false;
menu = 0;
menu2 = 0;
lcd.clear();
}
arriba();
abajo();
}
//menu buzzer2
while (menu == 1 && menu2 == 5) {
lcd.setCursor(0, 0);
lcd.print("Titilar?");
lcd.setCursor(5, 1);
lcd.print("Freq=");
if (enter.pressed()) {
titilar = !titilar;
}
if (titilar == false) {
lcd.setCursor(0, 1);
lcd.print("No");
} else {
lcd.setCursor(0, 1);
lcd.print("Si");
}
lcd.setCursor(10, 1);
lcd.print(freq);
if (freq == 1000) {
lcd.setCursor(14, 1);
lcd.print("ms");
}
if (freq < 1000 && freq >= 100) {
lcd.setCursor(13, 1);
lcd.print("ms");
}
while (der.read() == 0 && freq < 1000) {
freq = freq + 10;
lcd.setCursor(10, 1);
lcd.print(freq);
if (freq <= 100) {
lcd.setCursor(12, 1);
lcd.print("ms");
}
if (freq == 1000) {
lcd.setCursor(14, 1);
lcd.print("ms");
}
if (freq < 1000 && freq >= 100) {
lcd.setCursor(13, 1);
lcd.print("ms");
}
delay(100);
if (der.read() == 1) {
lcd.clear();
}
}
while (izq.read() == 0 && freq > 100) {
freq = freq - 10;
lcd.setCursor(10, 1);
lcd.print(freq);
if (freq <= 100) {
lcd.setCursor(12, 1);
lcd.print("ms");
}
if (freq == 1000) {
lcd.setCursor(14, 1);
lcd.print("ms");
}
if (freq < 1000 && freq >= 100) {
lcd.setCursor(13, 1);
lcd.print("ms");
}
delay(100);
if (izq.read() == 1) {
lcd.clear();
}
}
arriba();
}
//Menu Impresora
while (menu == 2 && menu2 == 0) {
lcd.setCursor(0, 0);
lcd.print("Sensor Impresora");
if (sensimp == 0) {
lcd.setCursor(0, 1);
lcd.print("Las dos");
ender = true;
arty = true;
}
if (sensimp == 1) {
lcd.setCursor(0, 1);
lcd.print("Ender");
ender = true;
arty = false;
}
if (sensimp == 2) {
lcd.setCursor(0, 1);
lcd.print("Artillery");
ender = false;
arty = true;
}
if (sensimp == 3) {
lcd.setCursor(0, 1);
lcd.print("Apagado");
ender = false;
arty = false;
}
if (enter.pressed()) {
sensimp++;
lcd.clear();
if (sensimp == 4) {
sensimp = 0;
}
}
izquierda();
abajo();
}
//Volumen Impresora
while (menu == 2 && menu2 == 1) {
lcd.setCursor(0, 0);
lcd.print("Volumen:");
if (enter.pressed()) {
volbuzzerlcd = volbuzzerlcd + 10;
}
if (izq.pressed()) {
volbuzzerlcd = volbuzzerlcd - 5;
lcd.clear();
}
if (der.pressed()) {
volbuzzerlcd = volbuzzerlcd + 5;
}
volbuzzer = map(volbuzzerlcd, 0, 100, 0, 255);
if (volbuzzerlcd > 100) {
volbuzzerlcd = 0;
lcd.clear();
}
if (volbuzzerlcd < 0) {
volbuzzerlcd = 100;
lcd.clear();
}
if (volbuzzerlcd >= 10 && volbuzzerlcd < 100) {
lcd.setCursor(2, 1);
lcd.print("%");
} else {
if (volbuzzerlcd >= 0 && volbuzzer <= 5) {
lcd.setCursor(1, 1);
lcd.print("%");
}
if (volbuzzerlcd == 100) {
lcd.setCursor(3, 1);
lcd.print("%");
}
}
lcd.setCursor(0, 1);
lcd.print(volbuzzerlcd);
arriba();
}
}