Aiuto sketch termometro con uscita relè

Buona sera a tutti, seguendo vari tutorial in rete sono riuscito a mettere insieme
uno sketch per un termometro che mi vizualizza ora, data, temp, temp minima e max idem per l'umidità
avendo usato un dht11.
A tale termometro vorrei aggiungere un relè in modo da eccitarlo sopra una certa soglia.
Nello sketch ho inserito in fondo al codice la funzione if per determinare il range di temperatura
purtroppo non capisco perché il relè si ecciti in modo casuale e non segua il range di temperatura impostata.. vi è qualche anima pia che potrebbe dare un occhiattina al codice e dirmi dove sbaglio?
Sono giorni che ci sbatto la testa.. un grazie anticipato.

  /* Stazione meteo Arduino v1.0
         *
         */
        #include <Wire.h> //libreria che consente la comunicazione con i2c                
        #include <LiquidCrystal_I2C.h>  //libreria display i2c
        #include "RTClib.h"
        #include <dht11.h>
        dht11 DHT;
        #define DHT11_PIN A2
        //////////////////////addr, en,rw,rs,d4,d5,d6,d7,bl, blpol
        LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //impostazione indirizzo del display e pin del display LCD collegati all'i2c
       RTC_DS1307 RTC;
        int temp=0; //raccoglie misura temperatura
        int um=0; //raccoglie misura umidità
        int temp_min=0; //si ricorda della temperatura min. registrata
        int um_min=0; //si ricorda dell'umidità min. registrata
        int temp_max=0; //si ricorda della temperatura max. registrata
        int um_max=0; //si ricorda dell'umidità min. registrata
        int c1, c2; //variabili iniziali per um_min e temp_min
        int rele=13;

         void setup() {
          lcd.begin(16,2); //inizializzo il display. Il display LCD usato è 16x2
          Serial.begin(9600);
          lcd.setCursor(3,0); //scritta all'avvio di arduino
          lcd.print(" Meteo ");
          lcd.setCursor(11,1);
          lcd.print("  1.0  ");
          delay(3000);
          pinMode(rele, OUTPUT);
          }

        void loop() {
           DateTime now = RTC.now();
          lcd.clear();
          int chk = DHT.read(DHT11_PIN); //abilito lettura dht11
          temp=DHT.temperature; //raccolgo misura temperatura
          um=DHT.humidity; //raccolgo misura umidità
          //stampo valori sul display lcd  
          lcd.setCursor(1, 0);
       if ( now.hour() < 10)
       {
         lcd.print(" ");
         lcd.print(now.hour(), DEC);
       }
       else
       {
       lcd.print(now.hour(), DEC);
       }
       lcd.print(":");
       if ( now.minute() < 10)
       {
         lcd.print("0");
         lcd.print(now.minute(), DEC);
       }
       else
       {
       lcd.print(now.minute(), DEC);
       }
      
       lcd.setCursor(10, 0);
       lcd.print("T:");
       lcd.print(DHT.temperature,1);
       lcd.write(0b11011111);
       lcd.print("C");
        
       lcd.setCursor(0, 1);
       if ( now.day() < 10)
       {
         lcd.print("0");
         lcd.print(now.day(), DEC);
       }
       else
       {
       lcd.print(now.day(), DEC);
       }
       lcd.print("/");
       if ( now.month() < 10)
       {
         lcd.print("0");
         lcd.print(now.month(), DEC);
       }
       else
       {
       lcd.print(now.month(), DEC);
       }
       lcd.print("/");
       lcd.print(now.year(), DEC);
       lcd.print("");
      
       lcd.setCursor(11, 1);
       lcd.print("U:");
       lcd.print(DHT.humidity,1);
       lcd.print("%");
      
          delay(25000);
          //riempio  variabili um_min e tem_min per la misura iniziale
          if (c1==0) {
            um_min=um;
          }
          if (c2==0) {
            temp_min=temp;
          }
          
          if (temp>temp_max) {
            temp_max=temp;
          }
          
          if (um>um_max) {
            um_max=um;
          }
          
          if (um_min>=um) {
            um_min=um;
            c1++;
          }

          if (temp_min>=temp) {
            temp_min=temp;
            c2++;
          }
         //stampo statistiche: um_max, um_min, temp_max, temp_min
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("Temp. max.: ");  
          lcd.print(temp_max);
          lcd.print((char)223);
          lcd.print("C");
          lcd.setCursor(0,1);
          lcd.print("Umid. max.: ");          
          lcd.print(um_max);
          lcd.print("%");
          delay(9000);  
          lcd.clear();
          lcd.setCursor(0,0);
         lcd.print("Temp. min.: ");  
          lcd.print(temp_min);
          lcd.print((char)223);
          lcd.print("C");
          lcd.setCursor(0,1);
          lcd.print("Umid. min.: ");          
          lcd.print(um_min);
          lcd.print("%");
          if (temp >28) {
    digitalWrite(rele, LOW );
    }

    else {
    digitalWrite(rele, HIGH );
    delay(2000);
    }

          
        }