PROBLEMA: acquisizione dati sensori DHT11

selve,

sto creando un circuito dove acquisisce il valore della luminosità da una fotoresistenza e temperatura e umidità da un sensore DHT11

La parte del programma che gestisce il sensore DHT11 lo acquista da un esempio specifico creato da Elegoo. Il programma senza aggiungere le righe di codice per la luminosità funziona benissimo, mentre quando sono andato a modificarlo per acquisire le anche la luminosità il blocco di istruzioni del sensore DHT11 non funzionano.

Non capisco perché quando modifico il programma fa visualizzare solo la luminosità mentre temperatura e umidità non lo fa, qualcuno mi potrebbe aiutare?

(arduino deve comunicare con un programma scritto in visual basic ma quella parte funziona)

//librerie
#include <dht_nonblocking.h>;
#define DHT_SENSOR_TYPE DHT_TYPE_11

//dichiarazione void;
//luminosità
void luminosita();

//gestinoe stringa mandata da visual basic
void visualbasic();

static const int DHT_SENSOR_PIN = 8;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );

//inizializzo sensore luminosità
int fotoresistenza = A0;
//variabile luminosità
int valo;
int valluminosita;

//variabile per sensore dht11
int t;
int h;

String inputString = "";     
bool stringComplete = false; 

void setup( )
{
  Serial.begin( 9600);
  //dichiarazione porte analogicge
  //luminosità
  pinMode(A0, INPUT);

    //riserva 200 caratteri alla frase
  inputString.reserve(200);
}

static bool measure_environment( float *temperature, float *humidity )
{
  static unsigned long measurement_timestamp = millis( );

  /* Measure once every four seconds. */
  if( millis( ) - measurement_timestamp > 3000ul )
  {
    if( dht_sensor.measure( temperature, humidity ) == true )
    {
      measurement_timestamp = millis( );
      return( true );
    }
  }

  return( false );
}

void loop( )
{

  //richiama void
  luminosita();

  //controlla se stringacompletata e diventata tru
   if (stringComplete) {    
    //richima void
  visualbasic();
   }

    float temperature;
  float humidity;

  if( measure_environment( &temperature, &humidity ) == true )
  {
  
    Serial.print( "T = " );
    Serial.print( temperature, 1 );
    Serial.print( "C, H = " );
    Serial.print( humidity, 1 );
    Serial.println( "%" );

    t = temperature;
    h = humidity;
    
 }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    //laggi caratteri della serial port
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

void visualbasic()
{
  //controlla che stringa hai recivuto e per oguno da essi fai azione desiderata
       if (inputString=="tem\n")
    {
      //manda caratteri al visual basic
      Serial.println(t);
    }
    else if (inputString=="umi\n")
    {
      //manda caratteri al visual basic
      Serial.println(h);    
    }
    else if (inputString=="lum\n")
    {
    //manda caratteri al visual basic
      Serial.println(valluminosita);
     }
          
    // clear the string:
    inputString = "";
    stringComplete = false;
}

void luminosita()
{
  //leggi la variabile della fotoresistenza
  valo = analogRead(fotoresistenza);

//convertilo in percentuale
  valluminosita = map(valo, 0,1023, 0, 100);

  Serial.print("luminosita: ");
  Serial.println(valluminosita);
  delay(4000);
}

Non capisco, usi una libreria che non avevo mai sentito, DHT_nonblocking
ma che dal nome penso di capire non sia bloccante quando legge le due misure,
perciò penso sia importante per il tuo programma non avere cose bloccanti (per la comunicazione con VB ?)
allora perchè dentro a luminosità c'e' una delay di 4 secondi ? La delay è bloccante.

ti ringrazio sono riuscito a risolvere il problema utilizzando un altra librerie