Proyecto de Atmósfera Controlada. Sensor DHT22 + Reles

Buenas, soy Toribio y nuevo por estos lares, después de un par de meses encendiendo y apagando leds me he embarcado en mi primer proyecto, una atmosfera controlada, la idea es con un sensor DHT22 leer la temperatura y humedad que hay en la sala y activar reles conectados a un humificador, un extrator y una estufita para que la temperatura y la humedad queden dentro de los límites que me interesa.

Ahora el problema, estoy empezando a programar y ando un poco perdido, consigo encender el rele o apagarlo según la temperatura que haya pero es como si solo leyera una vez el sensor y se quedara en ese estado, la temperatura y la humedad no vuelve a cambiar.

Os pego el código.

Como vereís ahora mismo sale la temperatura y humedad en un lcd y en el monitor serial cuando lo consiga hacer funcionar solo lo pondré en el lcd.

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"
#include <LiquidCrystal.h>

//// CODIGO SENSOR DE HUMEDAD Y TEMPERATURA DHT22

#define DHTPIN 7     // what pin we're connected to

#define DHTTYPE DHT22   // DHT 22  (AM2302)


// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND


DHT dht(DHTPIN, DHTTYPE);

//// CODIGO LCD


//  LCD RS pin to digital pin 12
//  LCD Enable pin to digital pin 11
//  LCD D4 pin to digital pin 5
//  LCD D5 pin to digital pin 4
//  LCD D6 pin to digital pin 3
//  LCD D7 pin to digital pin 2
//  LCD R/W pin to ground
//  10K resistor:
//  ends to +5V and ground
//  wiper to LCD VO pin (pin 3)

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// RELE 
int rele1 = 8;                 // PIN al que va conectado el relé

void setup() {
  Serial.begin(9600); 
  Serial.println("DHT22 test!");

  lcd.begin(16, 2);
  lcd.print("DHT22 test!");

  dht.begin();

  pinMode(rele1, OUTPUT); 

}

void loop() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println("Fallo al leer el sensor");
    lcd.print("Fallo al leer el sensor");

  } 
  else {
    Serial.print("Humedad: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperatura: "); 
    Serial.print(t);
    Serial.println(" *C");
    lcd.setCursor(0, 0);
    lcd.print("Humedad: ");
    lcd.print(h);
    lcd.print(" %\t");
    lcd.setCursor(0,1);
    lcd.print("Temp:   ");
    lcd.print(t);
    lcd.print(" *C");

  }
   
    

while (true)
{
    if (t < 24.00)
    {
          digitalWrite(rele1, HIGH);
                
    }
    else digitalWrite(rele1, LOW);
 
}

}

A ver si me echáis una mano! Que estoy muy emocionado con estos primeros pinitos en la electrónica y no tengo a nadie a quien recurrir.

Daros la gracias por vuestro tiempo y espero que algún día yo pueda ayudar.

Saludos.

El While(true) va a hacer que nunca salga de ese bucle, yo quitaría el while, las instrucciones se encuentran dentro del loop, así que harás el if siempre.

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"
#include <LiquidCrystal.h>

//// CODIGO SENSOR DE HUMEDAD Y TEMPERATURA DHT22

#define DHTPIN 7     // what pin we're connected to

#define DHTTYPE DHT22   // DHT 22  (AM2302)


// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND


DHT dht(DHTPIN, DHTTYPE);

//// CODIGO LCD


//  LCD RS pin to digital pin 12
//  LCD Enable pin to digital pin 11
//  LCD D4 pin to digital pin 5
//  LCD D5 pin to digital pin 4
//  LCD D6 pin to digital pin 3
//  LCD D7 pin to digital pin 2
//  LCD R/W pin to ground
//  10K resistor:
//  ends to +5V and ground
//  wiper to LCD VO pin (pin 3)

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// RELE 
int rele1 = 8;                 // PIN al que va conectado el relé

void setup() {
  Serial.begin(9600); 
  Serial.println("DHT22 test!");

  lcd.begin(16, 2);
  lcd.print("DHT22 test!");

  dht.begin();

  pinMode(rele1, OUTPUT); 

}

void loop() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println("Fallo al leer el sensor");
    lcd.print("Fallo al leer el sensor");

  } 
  else {
    Serial.print("Humedad: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperatura: "); 
    Serial.print(t);
    Serial.println(" *C");
    lcd.setCursor(0, 0);
    lcd.print("Humedad: ");
    lcd.print(h);
    lcd.print(" %\t");
    lcd.setCursor(0,1);
    lcd.print("Temp:   ");
    lcd.print(t);
    lcd.print(" *C");

  }
   
    

    if (t < 24.00)
    {
          digitalWrite(rele1, HIGH);
                
    }
    else digitalWrite(rele1, LOW);

}

Gracias, efectivamente funciona, probé el if pero me fallaría algo.Era más facil de lo que yo creía.

Un saludo.