ayuda con declaracion de variable

estoy armando un controlador para un invenadero pero tengo problemas cuando usa las variables t y h en las funciones
Temperatura() y Humedad()
me dice lo siguiente
t was not declared in the scope

en que es lo que me estoy equivocando ?

#include <LiquidCrystal.h>
#include "DHT.h"
int humMin = 40;
int humMax = 50;
int tempMin = 22;
int tempMax = 25;
int riegoMin = 30;
int riegoMax = 30;

#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(10, 8, 6, 7, 3, 2);
int R_BOMBA = 6; 
int R_VENTILADOR = 5;
int R_FOCO = 4;
int R_HUMEDAD = 3;
int humMaceta = 0;

  
  
 void setup (){
   

    Serial.begin(9600);
  pinMode(R_BOMBA, OUTPUT);
  pinMode(R_VENTILADOR, OUTPUT);
  pinMode(R_FOCO, OUTPUT);
  pinMode(R_HUMEDAD, OUTPUT);
  dht.begin();
  lcd.begin(20,4);
}
void loop (){
 
 float h = dht.readHumidity();
 float t = dht.readTemperature ();
 
   if (isnan(t) || isnan(h)) {
    Serial.println("Fallo la lectura del sensor");
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Fallo la lectura del sensor");
    
  }
   Serial.print("Humedad: ");
  Serial.print(h);
  Serial.print(" %     ------      ");
  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.print(" C  ------    ");
   delay(3000);
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("Humedad: ");
  lcd.print(h);
  lcd.setCursor (0,2);
  lcd.print("Temperatura: ");
  lcd.print(t);
  delay(3000);
}

void Humedad() {
  if (h < humMin) {
    digitalWrite(R_HUMEDAD, HIGH);
  }
  if (h > humMax) {
    digitalWrite (R_HUMEDAD, LOW);
  }
}

void Temperatura() {
  if (t < tempMin) {
    digitalWrite(R_VENTILADOR, LOW);
  }
  if (t > tempMax) {
    digitalWrite (R_VENTILADOR, HIGH);
  }
}

void Riego() {
  if (humMaceta < riegoMin) {
    digitalWrite (R_BOMBA, HIGH);
  }
  if (humMaceta > riegoMax) {
    digitalWrite (R_BOMBA, LOW);
  }
}

Hola.
Lo que ocurre es que las variables no tienen alcance fuera de las llaves en que se definieron. Haz t y h globales:
Definelas antes de setup, y en el loop deja sólo las asignaciones.

float t,h;
Setup(){......
}

loop{
t=dht.readhumidity();
h=dht.readtemperature();
.....
}

Hola, esto no tiene nada que ver con la declaración de un avariable pero...

Cuando me puse a diseñar mi sistema para controlar un terrario, me di cuenta que al poner máxima / mínima hay un punto en el que dependeindo de la calidad y precisión de los sesnsores, el rele se queda intermitente. Esto es por que pasa una decima de la temperatura maxima pone el ventilador para enfreiar, baja de la temperatura maxima se paara el ventilador, sube una decima entre el ventilador.... Para evitar esto tenemos que crear una variable que creo que se llama histeresis para añadirle un margen de tolerancia a las temperaturas....

Un saludo y espero que te sirba para tu invernadero.