Problemi con codice.

Salve a tutti, il mio progetto era di usare un relè per controllare l'attivazione di un tappetino riscaldante in base alla temperatura registrata da un sensore DHT11, con l'aggiunta di un LED che lampeggia in caso di problemi.
Quando però alimento Arduino il LED lampeggia per qualche secondo e il relè viene attivato, poi si spengono entrambi e rimangono in questo stato anche se la bassa temperatura dovrebbe far attivare il relè.
Questo è il codice che ho scritto tagliando e incollando codici trovati su tutorial visto che da solo non avrei saputo fare nulla:

#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 4

void setup(){
  pinMode(8, OUTPUT);
  pinMode(2, OUTPUT); 
}

void loop(){
  int chk;
  Serial.print("DHT11, \t");
  chk = DHT.read(DHT11_PIN);    // READ DATA
  switch (chk){
    case DHTLIB_OK:  
                if (DHT.temperature<30)
                {
                  pinMode(2, LOW);
                }

                else if (DHT.temperature>=31)
                {
                  pinMode(2, HIGH);
                }
                  
                break;
    case DHTLIB_ERROR_CHECKSUM: 
                digitalWrite(8, HIGH);
                delay(500);
                digitalWrite(8, LOW);
                delay(500);
                
    case DHTLIB_ERROR_TIMEOUT: 
                digitalWrite(8, HIGH);
                delay(500);
                digitalWrite(8, LOW);
                delay(500);
                
    default: 
                digitalWrite(8, HIGH);
                delay(500);
                digitalWrite(8, LOW);
                delay(500);
                break;
  }
 

  delay(1000);
}

Al pin 4 ho collegato il cavo dati del DHT11, al pin 8 il LED e al pin 2 quello per l'accensione del relè.

Come hai collegato il Led e il Relè? Direttamente, con resistenze, con un modulo già pronto?
Metti dei serial print dentro i case per sapere dove entra e stampa anche la risposta del sensore.

Ciao, innanzittutto ti mancano i due break nei case 2 e 3 a meno che tu non li abbia rimossi di proposito.
poi secondo me si potrebbe bloccare perchè fai troppe letture, se non ricordo male i sensori DHT vanno letto non più di una volta al secondo, prova ad effetuare la lettura e il controllo delle temperature ad esempio ogni 5 secondi (con l'uso di millis e non del delay :wink: ) e vedi se era quello il problema.

Per il relè avevo un modulo già pronto, il led è collegato in serie ad una resistenza.
Comunque ho semplicemente sostituito LOW del pin 2 con HIGH nel primo caso e sembra funzionare.
Quindi ora quella parte di codice è:

    case DHTLIB_OK:  
                if (DHT.temperature<30)
                {
                  pinMode(2, HIGH);
                }

                else if (DHT.temperature>=31)
                {
                  pinMode(2, LOW);
                }
                  
                break;

Ora lo lascerò acceso per qualche ora per essere sicuro che funzioni bene.

Non devi usare pinMode() ma digitalWrite().
Pin mode si usa solo nel setup() e serve a caratterizzare la funzione del pin, se di input o output.
Per attivare o disattivare un segnale devi usare digitalWrite().