#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 20, 3);
const int led =25;
//variable donde se concatenan los datos GPS
String cadena;
// Ejemplo de temperatura como string
String temperaturaString = "70";
int temperaturaInt;
// Ejemplo de humedad como string
String HumedadString = "86";
int HumedadInt;
// Ejemplo de distancia como string
String DistanciaString = "61";
int DistanciaInt;
//VARIABLE PARA GUARDAR DATOS INDEPENDIENTES
String dato1;
String dato2;
String dato3;
//AGREGAMOS LOS LEDS
int Led1 = 2;
int Led2 = 5;
int Led3 = 4;
void setup() {
Serial.begin(115200);//Iniciamos comunicacion serial
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
pinMode(Led3, OUTPUT);
// Init
LCD.init();
LCD.backlight();
}
//0 //1 //2 //3 //4 //5
//Temperatura-30-Humedad-24-Distancia-10-
void loop() {
if(Serial.available()>0){//PREGUNTA SI HAY DATOS EN EL SERIAL
char datoAux = Serial.read(); //ALMACENA EL CARACTER DE FORMA TEMPORAL
cadena += datoAux;// CONCATENA EL CARACTER EN LA VARIABLE STRING
if(datoAux == '\n'){//PREGUNTA SI LA TRAMA FINALIZA CON UN ENTER
dato1= getValue(cadena, '-' , 1);
dato2= getValue(cadena, '-' , 3);
dato3= getValue(cadena, '-' , 5);
//Presentar mensajes en monitor serial y Lcd:
PresentarMonitorSerial();
PresentarPantallaLCD();
Convertir_String();
}
}
}
String getValue(String data, char separator, int index){
int found = 0;
int strIndex[] = { 0, -1};
int maxIndex = data.length() - 1;
for (int i = 0; i <= maxIndex && found <= index; i++){
if (data.charAt(i) == separator || i == maxIndex){
found++;
strIndex[0] = strIndex[1] + 1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}
void PresentarMonitorSerial(){
//MOSTRAR EN SERIAL
Serial.print("Temperatura:");
Serial.print(dato1);
Serial.println("g");
Serial.print("Humedad:");
Serial.print(dato2);
Serial.println("%");
Serial.print("Distancia:");
Serial.print(dato3);
Serial.println("cm");
Serial.print("===============");
Serial.println("");
cadena = ""; // Limpia la variable String si se recibe un enter
}
void PresentarPantallaLCD(){
//SE PRESENTA EN LCD
LCD.setCursor(0, 0);
LCD.println("TEMPERATURA:");
LCD.print(dato1);
LCD.println("g");
LCD.setCursor(0, 1);
LCD.println("Humedad:");
LCD.print(dato2);
LCD.println("%");
LCD.setCursor(0, 2);
LCD.println("Distancia:");
LCD.print(dato3);
LCD.print("%");
}
void Convertir_String(){
temperaturaInt = temperaturaString.toInt(); // Convertimos el string a int
HumedadInt = HumedadString.toInt(); // Convertimos el string a int
DistanciaInt = DistanciaString.toInt(); // Convertimos el string a int
if (temperaturaInt > 38) {
digitalWrite(Led1, HIGH); // Enciende el LED
} else {
digitalWrite(Led1, LOW); // Apaga el LED
}
if (HumedadInt > 85) {
digitalWrite(Led2, HIGH); // Enciende el LED
} else {
digitalWrite(Led2, LOW); // Apaga el LED
}
if (DistanciaInt > 60) {
digitalWrite(Led3, HIGH); // Enciende el LED
} else {
digitalWrite(Led3, LOW); // Apaga el LED
}
}