#include "Wire.h"
#include "LiquidCrystal_I2C.h"

LiquidCrystal_I2C lcd(0x27,16,2);

#include "DHT.h"
#define DHTPIN A1 //Conectamos el Sensor DHT11 al pin A1
#define DHTTYPE DHT22  // EN FÍSICO ES DHT11
DHT dht(DHTPIN, DHTTYPE);

//bluetooth hc-06
int ledPin1 = 13;  // usamos un pin de salida al LED
int ledPin2 = 12;  // usamos un pin de salida al LED
int ledPin3 = 11;  // usamos un pin de salida al LED
int ledPin4 = 10;  // usamos un pin de salida al LED
int Dato = 0;
int EstadoBT = 2;  //Bluetooth (HC-05) State pin 2

      // Crear caracteres nuevos https://maxpromer.github.io/lcd-Character-Creator/
      byte Blueth[] = { B00100, B10110, B01101, B00110, B00110, B01101, B10110, B00100};
      byte Grados[] = { B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000};
      byte Humedad[] = { B00100, B00100, B01110, B01110, B11011, B11111, B11111, B01110};


void setup() {
   lcd.init(); // inicial el display
   lcd.backlight(); // limpia los datos en pantalla

  // ASIGNAR NUEVOS ÍCONOS, solo se pueden usar 8 declarados en el array lcd.createChar(#, name);
  lcd.createChar(1, Blueth);
  lcd.createChar(2, Grados);
  lcd.createChar(3, Humedad);

  dht.begin();      // Inicia el sensor

  pinMode(ledPin1, OUTPUT);    //Declara pin de Salida
  pinMode(ledPin2, OUTPUT);    //Declara pin de Salida
  pinMode(ledPin3, OUTPUT);    //Declara pin de Salida
  pinMode(ledPin4, OUTPUT);    //Declara pin de Salida
  Serial.begin(9600);

   lcd.setCursor(0, 0);
   lcd.print("IoT Project 2024");
   lcd.setCursor(0, 1);
   lcd.print("@ramirolopera");
   delay(5000);
   lcd.clear(); // comando para borrar el display
   lcd.setCursor(0, 0);
   lcd.print("1234");
   lcd.setCursor(0, 1);
   lcd.print("____");
}

void loop() {
  // LEE LOS DATOS GENERADOS POR LOS SENSORES
  int h = dht.readHumidity();  // Lee la humedad h y temperatura t
  int t = dht.readTemperature();  int f = dht.readTemperature(true);

  //si el modulo a manda dato, guardarlo en estado.
  if (Serial.available() > 0) {
    Dato = Serial.read();
  }  // esta parte del código es para solo 1 Carácter o Unidad.

  // SENSOR SALA
  if (Dato == 'a') {digitalWrite(ledPin1, HIGH);
   lcd.setCursor(0, 1);
   lcd.print("^");
  }  //  Encendido “ON”
  if (Dato == '1') {digitalWrite(ledPin1, LOW);
   lcd.setCursor(0, 1);
   lcd.print("_");
  } // Apagado “OFF”

   // SENSOR COCINA
  if (Dato == 'b') {digitalWrite(ledPin2, HIGH);
   lcd.setCursor(1, 1);
   lcd.print("^");
  }  //  Encendido “ON”
  if (Dato == '2') {digitalWrite(ledPin2, LOW);
   lcd.setCursor(1, 1);
   lcd.print("_");
  }  // Apagado “OFF”

   // SENSOR GARAGE
  if (Dato == 'c') {digitalWrite(ledPin3, HIGH);
   lcd.setCursor(2, 1);
   lcd.print("^");
  } //  Encendido “ON”
  if (Dato == '3') {digitalWrite(ledPin3, LOW);
   lcd.setCursor(2, 1);
   lcd.print("_");
  }  // Apagado “OFF”

   // SENSOR PATIO
  if (Dato == 'd') { digitalWrite(ledPin4, HIGH);
   lcd.setCursor(3, 1);
   lcd.print("^");
  } //  Encendido “ON”
  if (Dato == '4') {digitalWrite(ledPin4, LOW);
   lcd.setCursor(3, 1);
   lcd.print("_");
  }  // Apagado “OFF”

  // conexión del bluetooth
  lcd.setCursor(5,0); lcd.write(1);;
  if(digitalRead(EstadoBT)==HIGH) {lcd.setCursor(5,1); lcd.print("^");} // BT_Activo();
  if(digitalRead(EstadoBT)==LOW) {lcd.setCursor(5,1); lcd.print("_");} // BT_Apagado();

// IMPRIME TEMPERATURA
lcd.setCursor(7,0); lcd.write(2);lcd.print("C");
lcd.setCursor(7,1); lcd.print(t);

// IMPRIME HUMEDAD
lcd.setCursor(11,0); lcd.write(3);lcd.print(" Hum");
lcd.setCursor(12,1); lcd.print(h);

}