#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "thingProperties.h"
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pines y constantes
const int pinSensor= 32; // pin analogico parta el sensor
const int pinBomba = 4; // Pin digital para el relè
const float valorSeco = 4095.0; // Sensor al aire
const float valorHumedo = 2000.0; //Sensor sumergido
// Variables
float temperatura = 0.0;
void setup() {
Serial.begin(115200);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
pinMode(pinBomba, OUTPUT);
digitalWrite(pinBomba,HIGH);
delay(10000);
// Pantalla LCD
Wire.begin(21, 22); //SDA, SCL para ESP32
lcd.init();
lcd.backlight();
// Mensaje 1: Bienvenida
lcd.setCursor(0, 0);
lcd.print(" Bienvenidos");
lcd.setCursor (0, 1);
lcd.print("Proyecto");
delay(3000);
lcd.clear();
//Mensaje 2: Participaciòn estudiantil
lcd.setCursor(0, 0);
lcd.print("Paticipaciòn");
lcd.setCursor(0, 1);
lcd.print("Estudiantil");
delay(3000);
lcd.clear();
// Inicializaciòn de variables en la nube
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
// Your code here
//Lectura y càlculo de humedad
float lectura = analogRead(pinSensor);
float humedadCalculada = 100.0 * (valorSeco-lectura) / (valorSeco - valorHumedo);
humedadCalculada = constrain(humedadCalculada, 0.0, 100.0);
sensorHumedad= humedadCalculada;
// Càlculo de temperatura relativa estimada
temperatura = 40.0 - (sensorHumedad * 0.3);
// Mostrar por Serial
Serial.print("Lectura: ");
Serial.print(lectura);
Serial.print(" Humedad: ");
Serial.print(sensorHumedad);
Serial.print(" % Temp: ");
Serial.print(temperatura);
Serial.print(" C");
Serial.print(" umbral: ");
Serial.print(umbralHUM);
Serial.println(" %");
//Mostrar en pantalla LCD
lcd.setCursor(0, 0);
lcd.print("Humedad: ");
lcd.print(sensorHumedad, 1); // 1 son los decimales
lcd.print("% ");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temperatura, 1);
lcd.print( (char)223); // sìmbolo °
lcd.print("C ");
// Control automatico de la bomba
if(sensorHumedad < umbralHUM) {
digitalWrite(pinBomba, LOW); // Activa la bomba (activo en LOW)
bomba = true;
} else {
digitalWrite(pinBomba, HIGH); // Apaga bomba
bomba= false;
}
delay(2000);
}
// Funciones de cambio desde el IoT Cloud
/*
Since UmbralHum is READ_WRITE variable, onUmbralHumChange() is
executed every time a new value is received from IoT Cloud.
*/
void onUmbralHumChange() {
// Add your code here to act upon UmbralHum change
}
/*
Since Bomba is READ_WRITE variable, onBombaChange() is
executed every time a new value is received from IoT Cloud.
*/
void onBombaChange() {
// Add your code here to act upon Bomba change
}


