#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define DHT22_PIN 23 // Pin GPIO23 conectado al sensor DHT22
#define TRIG_PIN 4 // Pin GPIO4 para el TRIG del HC-SR04
#define ECHO_PIN 5 // Pin GPIO5 para el ECHO del HC-SR04
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C 0x27, 16 columnas y 2 filas
DHT dht22(DHT22_PIN, DHT22);
const String mensaje = "Bienvenido al sistema de sensores"; // Mensaje a mostrar
int mensajeLength;
void setup() {
dht22.begin(); // inicializa el sensor DHT22
lcd.init(); // inicializa el LCD
lcd.backlight(); // activa la retroiluminación
// Configurar pines del HC-SR04
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
mensajeLength = mensaje.length();
// Mostrar mensaje desplazándose de izquierda a derecha
for (int pos = 0; pos <= mensajeLength + 16; pos++) {
lcd.setCursor(0, 0); // Mueve el cursor a la posición inicial en la parte izquierda
// Mostrar la parte visible del mensaje
if (pos < 16) {
lcd.print(mensaje.substring(0, pos)); // Muestra desde el inicio hasta la posición actual
} else if (pos < mensajeLength + 16) {
lcd.print(mensaje.substring(pos - 15, pos)); // Muestra el desplazamiento del mensaje
} else {
lcd.print(" "); // Rellenar espacios una vez desplazado
}
delay(200); // Cambia la velocidad del desplazamiento aquí
lcd.clear(); // Limpia el LCD antes de la próxima iteración
}
// Asegúrate de que la pantalla quede limpia antes de empezar las lecturas
lcd.clear();
delay(2000);
}
long medirDistancia() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duracion = pulseIn(ECHO_PIN, HIGH);
long distancia = (duracion * 0.034 / 2); // Convertir a cm
return distancia;
}
void loop() {
float humi = dht22.readHumidity(); // lee la humedad
float tempC = dht22.readTemperature(); // lee la temperatura
long distancia = medirDistancia(); // mide la distancia en cm
lcd.clear();
// verifica si la lectura fue exitosa o no
if (isnan(tempC) || isnan(humi)) {
lcd.setCursor(0, 0);
lcd.print("Failed");
} else {
lcd.setCursor(0, 0); // posición para mostrar la distancia
lcd.print("Dist: ");
lcd.print(distancia); // muestra la distancia
lcd.print(" cm "); // Espacio extra para limpiar
lcd.setCursor(0, 1); // posición para mostrar la temperatura
lcd.print("T:");
lcd.print(tempC); // muestra la temperatura
lcd.print("C ");
lcd.setCursor(8, 1); // posición para mostrar la humedad
lcd.print("H:");
lcd.print(humi); // muestra la humedad
lcd.print("%");
}
// espera 2 segundos entre lecturas
delay(2000);
}