#include "DHT.h"
#include <LiquidCrystal_I2C.h>
#define DHTPIN A0     // Digital pin connected to the DHT sensor
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
DHT dhtPlanta1(DHTPIN, DHTTYPE);
#define I2C_ADDR    0x27
#define LCD_COLUMNS 16
#define LCD_LINES   2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
byte TemperatureIcon[] = {
  B01110,
  B01010,
  B01010,
  B01010,
  B01010,
  B10001,
  B10001,
  B01110
};
byte gradosC[] = {
  B11100,
  B10100,
  B11100,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};
byte iconoAlto[] = {
  B00000,
  B00000,
  B00001,
  B00001,
  B00101,
  B00101,
  B10101,
  B10101
};
byte iconoBajo[] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B10000,
  B10000
};
byte iconoIdeal[] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00100,
  B00100,
  B10100,
  B10100
};
byte iconoHumedad[] = {
  B00000,
  B00100,
  B01010,
  B10001,
  B10001,
  B10001,
  B01110,
  B00000
};
void setup() {
  //inicializa la pantalla lcd
  lcd.init();
  lcd.backlight();
  
  lcd.createChar(0, gradosC);
  lcd.createChar(1, TemperatureIcon);
  lcd.createChar(2, iconoBajo);
  lcd.createChar(3, iconoIdeal);
  lcd.createChar(4, iconoAlto);
  lcd.createChar(5, iconoHumedad);
  //inicializa el puerto serial
  Serial.begin(9600);
  Serial.println(F("PUERTO SERIAL INICIADO PARA DHT11"));
  dhtPlanta1.begin();
  Serial.println("Maquina,Humedad,Temp,Celsius,TempF,estadoHumedad,estadoTemp");
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
}
void loop() {
  delay(2000);
  int humedadPlanta1 = dhtPlanta1.readHumidity();
  int temperaturaPlanta1 = dhtPlanta1.readTemperature();
  float temperaturaPlanta1F = dhtPlanta1.readTemperature(true);
  String estadoHumedad;
  String estadoTemp;
  temperaturaPlanta1 = random(15,40);
  humedadPlanta1 = random(50,90);
  if(temperaturaPlanta1 < 18){
    digitalWrite(10, HIGH);
    estadoTemp = "Bajo ";
    lcd.setCursor(0,1);
    lcd.write(2);
  }else{ digitalWrite(10, LOW); }
  if(temperaturaPlanta1 >= 18 && temperaturaPlanta1 <= 24){
    digitalWrite(9, HIGH);
    estadoTemp = "Ideal";
    lcd.setCursor(0,1);
    lcd.write(3);
  }else{ digitalWrite(9, LOW); }
  if(temperaturaPlanta1 > 24){
    digitalWrite(8, HIGH);
    estadoTemp = "Alto ";
    lcd.setCursor(0,1);
    lcd.write(4);
  }else{ digitalWrite(8, LOW); }
  
  if(humedadPlanta1 < 60){
    digitalWrite(4, HIGH);
    estadoHumedad = "Bajo ";
    lcd.setCursor(9,1);
    lcd.write(2);
  }else{ digitalWrite(4, LOW); }
  if(humedadPlanta1 >= 60 && humedadPlanta1 <= 80){
    digitalWrite(3, HIGH);
    estadoHumedad = "Ideal";
    lcd.setCursor(9,1);
    lcd.write(3);
  }else{ digitalWrite(3, LOW); }
  if(humedadPlanta1 > 80){
    digitalWrite(2, HIGH);
    estadoHumedad = "Alto ";
    lcd.setCursor(9,1);
    lcd.write(4);
  }else{ digitalWrite(2, LOW); }
  Serial.print("Mq 1,");
  Serial.print(humedadPlanta1); Serial.print(",");
  Serial.print(temperaturaPlanta1); Serial.print(",");
  Serial.print(temperaturaPlanta1F); Serial.print(",");
  Serial.print(estadoHumedad); Serial.print(",");
  Serial.print(estadoTemp); 
  Serial.println("");
  lcd.setCursor(0, 0);
  lcd.write(1);
  lcd.print("T:");
  lcd.print(temperaturaPlanta1);
  lcd.setCursor(5,0);
  lcd.write(0);
  lcd.print("C");
  
  lcd.setCursor(10, 0);
  lcd.write(5);
  lcd.print("H:");
  lcd.print(humedadPlanta1);
  
  lcd.setCursor(1, 1);
  lcd.print(estadoTemp);
  
  lcd.setCursor(10, 1);
  lcd.print(estadoHumedad);
}