#include <DHT.h>
#include <DHT_U.h>
// Incluimos librería
//#include <DHT.h> //libreria para el sensor de humedad ytemperatura
#include <LiquidCrystal.h> //libreria para la pantalla LCD
#include <TimerOne.h>
// Definimos el pin digital donde se conecta el sensor
#define DHTPIN 2
// Dependiendo del tipo de sensor
#define DHTTYPE DHT11
// Inicializamos el sensor DHT11
DHT dht(DHTPIN, DHTTYPE);
//Lo primero es importar la librería DHT.h. Luego definimos dos constantes una para indicar el pin donde hemos conectado el DHT11 (pin digital) y otra para indicar el tipo de sensor, DHT11. Esta librería también se utiliza para controlar el DHT22, el hermano mayor del DHT11.
//Ahora configuraremos la pantalla LCD
// Definimos los pines para la conexión del LCD
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
//Crear el objeto LCD con los números correspondientes (rs, en, d4, d5, d6, d7)
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Creamos un objeto LCD
//A continuacion vamos a configurar el arduino para que interprete la secuencia de 40 bits enviada por el sensor cada periodo de tiempo
int contador=0;
float hum=0;
float temp=0;
float peso=0;
volatile bool flag = false;
volatile bool cambiarPantalla = false;
void setup() {
Timer1.initialize(5000000); // Dispara cada 5000 ms, es decir, cada 5 segundos
// Inicializamos comunicación serie
Timer1.attachInterrupt(ISR_Callback) ;
Serial.begin(9600);
// Comenzamos el sensor DHT
dht.begin();
// Inicializamos el LCD con 16 columnas y 2 filas
lcd.begin(16, 2);
}
//En la funcion principal lo que haremos sera leer cada vez que se ejecute el bucle me da el el sensor, definiremos dos variables, una para la temperatura y otra para la humedad, y cargaremos los valores medidos por el sensor en las variables.
void loop() {
noInterrupts(); //lo podria quitar, primero vamos a probar con esto
peso=5;
// Leemos la humedad relativa
hum = dht.readHumidity(); //aqui directamente definimos la variable y cargamos el valor medido por el sensor es una funcion que esta en la libreria
// Leemos la temperatura en grados centígrados (por defecto)
temp = dht.readTemperature(); //lo mismo pero con la temperatura
//Por tanto, cada 5 segundos se nos actualizaran las variables humedad y temperatura.
interrupts(); // Autoriza las interrupciones
if (flag){ //Cuando se active el flag, es decir la interrupcion, if flag==true
if (cambiarPantalla){
pantalla1(hum,temp);
}
else {
pantalla2(peso);
}
flag=false; //importante desactivamos el flag de interrupciones
}
}
//Vamos a crear una funcion para que La pantalla LCD muestre los valores de humedad y temperatura.
void pantalla1 (float hum,float temp) {
lcd.clear(); // Limpiamos la pantalla antes de escribir nuevos valores
lcd.setCursor(0, 0); // Colocamos el cursor en la primera línea
lcd.print("Humedad: "); // Mostramos el texto "Humedad: "
lcd.print(hum,2); // Mostramos el valor de la humedad
lcd.print("%"); // Mostramos el símbolo de porcentaje
lcd.setCursor(0, 1); // Colocamos el cursor en la segunda línea
lcd.print("Temperatura: "); // Mostramos el texto "Temperatura: "
lcd.print(temp); // Mostramos el valor de la temperatura
lcd.print("C"); // Mostramos el símbolo de grados Celsius
}
void pantalla2 (float peso) {
lcd.clear(); // Limpiamos la pantalla antes de escribir nuevos valores
lcd.setCursor(0, 0); // Colocamos el cursor en la primera línea
lcd.print("Peso: "); // Mostramos el texto "Humedad: "
lcd.print(peso); // Mostramos el valor de la humedad
lcd.print("Kg"); // Mostramos el símbolo de porcentaje
}
void ISR_Callback(){
flag=true;
cambiarPantalla = !cambiarPantalla; //Cambiar el estado de la variable para alternar entre pantallas
}