//vision monitor serie
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <math.h>
#include "DHT.h"

#define DHTPIN 12     // Pin donde está conectado el sensor
#define DHTTYPE DHT22   // Descomentar si se usa el DHT 11
DHT dht(DHTPIN, DHTTYPE);

const byte pinBuzzer=5; //pùerto bocina
byte salida=175;
float t=0;
float h=0;
float valor = 3600000;
int mas = 0;
int aceptar = 0;
float vol=0;
float x=0;
int alarm=0;
int b=0;
int temp=70;
int pa4=0;
int pa5=0;
LiquidCrystal_I2C lcd (0x27, 20, 4); // DIR, E, RW, RS, D4, D5, D6, D7
void setup() {
  lcd.init();
  pinMode(2, INPUT);//botones
  pinMode(3, INPUT);//botones
  pinMode(4, INPUT);//botones
  pinMode(8, OUTPUT); //rele
 Serial.begin(9600);
}

void loop()
{ 
 
 //DHT11
  delay(500);
  t = dht.readTemperature(); //Leemos la temperatura en grados Celsius
  h = dht.readHumidity();
  digitalWrite(8, LOW);
  mas = digitalRead(2); //cambio de numeros
  aceptar = digitalRead(3); //comenzar conteo
  alarm = digitalRead(4); //temperatura
      //Chequeo
   delay(1000);
   Serial.println("Chequeo...");
   Serial.println("El chequeo para que sea efectivo va a funcionar antes de presionar un boton, el pin 8 es el relay y pin 5 buzzer");
   Serial.println(" ");
    if(t>0&h>0)
{Serial.println("Sensor DHT11 OK!!");
Serial.println(" ");}
else
{Serial.println("Error Sensor DHT11!! pin12");
Serial.println(" ");}
if(mas>0)
{ Serial.println("Error!! en boton mas ");}  
if(aceptar>0)
{ Serial.println("Error!! en boton aceptar ");}
if(alarm>0)
{ Serial.println("Error!! en boton alarm ");}
if(mas==0&aceptar==0&alarm==0)
{ Serial.println("Botones 0k!!!");}
Serial.println(" ");
pa4 = analogRead(A4);
pa5 = analogRead(A5);
if(pa4<1023)
{ Serial.println("Error!! en pantalla pin A4");}
if(pa5<1023)
{ Serial.println("Error!! en pantalla pin A5");}
if(pa5==1023&pa4==1023)
{ Serial.println("LCD 0k!!!");}
Serial.println(" ");
Serial.println(" ");
//Fin del chequeo DHT11

//Muestra de temperatura
if(alarm==1)
{
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Temperatura");
lcd.setCursor(5, 1);
lcd.print(t);
lcd.setCursor(11, 1);
lcd.print("C");
delay(2000);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("  Humedad");
lcd.setCursor(5, 1);
lcd.print(h);
lcd.setCursor(11, 1);
lcd.print("%");
delay(2000);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Alarm. T & H");
lcd.setCursor(6, 1);
lcd.print(temp);
delay(2000);lcd.clear();
 }   

  
   
 if (mas == 1)
  {valor = valor + 1800000; delay(100);}

 //temporalizador
 //1
 if (aceptar == 1 && valor == 3600000)
    {Ciclo();}
 //1.5
 if (aceptar == 1 && valor == 5400000) 
 {Ciclo();}
              
//2
 if (aceptar == 1 && valor == 7200000)
    {Ciclo();}
//2.5
 if (aceptar == 1 && valor == 9000000)
    {Ciclo();}
//3
 if (aceptar == 1 && valor == 10800000)
   {Ciclo();}
 //3.5
 if (aceptar == 1 && valor == 12600000)
  {Ciclo();}
 //4
 if (aceptar == 1 && valor == 14400000)
    {Ciclo();}
 //4.5
 if (aceptar == 1 && valor == 16200000)
 {Ciclo();}
//5
 if (aceptar == 1 && valor == 18000000)
   {Ciclo();}
//5.5
 if (aceptar == 1 && valor == 19800000)
 {Ciclo();}
//6
 if (aceptar == 1 && valor == 21600000)
 {Ciclo();}
//6.5
 if (aceptar == 1 && valor == 23400000)
  {Ciclo();}
//7
 if (aceptar == 1 && valor == 25200000)
 {Ciclo();}

else  if (valor > 25200000) //volver a comenzar el conteo
{valor = 3600000; }
  
if(valor==0)
 {  lcd.setCursor(0, 0);
    lcd.print(" Carga Completa");
    }else if(t>temp){
  lcd.setCursor(0, 0);
  lcd.print("Muy Caliente");
   lcd.setCursor(0, 1);
  lcd.print(t);
     lcd.setCursor(3, 1);
  lcd.print("C");
  analogWrite(pinBuzzer,salida);
  digitalWrite(8, LOW);
  valor=1;
  }else{
      vol=valor/3600000*7/2.5;
       lcd.setCursor(3, 0);
    lcd.print(valor/3600000);
    lcd.setCursor(8, 0);
    lcd.print("Horas");
     lcd.setCursor(3, 1);
    lcd.print(vol);
    lcd.setCursor(9, 1);
    lcd.print("Vol");
    }
}

void Ciclo()
{
 
digitalWrite(8, HIGH);
        for(float i=valor; i>=0; i=i-1000) 
          {
            float t = dht.readTemperature();
          if(t>temp)//testeo de temperatura
              { 
                lcd.clear();
                lcd.setCursor(0, 0);
                lcd.print("Muy Caliente");
                lcd.setCursor(0, 1);
                lcd.print(t);
                lcd.setCursor(3, 1);
                lcd.print("C");
                analogWrite(pinBuzzer,salida);
                digitalWrite(8, LOW);
                delay(1000000000);
                 }else if(h>temp)
                 {
                  lcd.clear();
                lcd.setCursor(0, 0);
                lcd.print("     Agua");
                lcd.setCursor(5, 1);
                lcd.print(h);
                lcd.setCursor(10, 1);
                lcd.print("%");
                analogWrite(pinBuzzer,salida);
                digitalWrite(8, LOW);
                delay(1000000000);
                  }
                 else{
           lcd.setCursor(2, 0);
           lcd.print(i/60000);
           lcd.setCursor(8, 0);
           lcd.print("minutos");
           delay(1000);
           }}valor=0;
            }