Problema con DHT11, LCD y arduino Mega (reset)

Buenas a todos, tengo un pequeño problema que me tiene la verdad un poco loco y no sé por donde seguir.

Tengo un arduino mega con sensor de temperatura y humedad DHT11 y un display de DFROBOT con keypad.

Si ejecuto un codigo de prueba para ver si funciona el sensor lo hace sin problemas y me devuelve por serial los valores

#define SENSORES 52 

byte bGlobalErr;
byte dht_dat[4];
int temperatura;
int humedad;

void setup(){
IniciarSensor();
Serial.begin(9600);
delay(300);
Serial.println("Humidity and temperature\n\n");
delay(700);
}

void loop(){
  LeerDHT();
  switch (bGlobalErr){
     case 0:
      Serial.print("Current humdity = ");
      Serial.print(temperatura);
      Serial.print(".");
      Serial.print(dht_dat[1], DEC);
      Serial.print("%  ");
      Serial.print("temperature = ");
      Serial.print(humedad);
      Serial.print(".");
      Serial.print(dht_dat[3], DEC);
      Serial.println("C  ");
        break;
     case 1:
        Serial.println("Error 1: DHT start condition 1 not met.");
        break;
     case 2:
        Serial.println("Error 2: DHT start condition 2 not met.");
        break;
     case 3:
        Serial.println("Error 3: DHT checksum error.");
        break;
     default:
        Serial.println("Error: Unrecognized code encountered.");
        break;
           }
  delay(800);
}



void IniciarSensor(){
  pinMode(SENSORES,OUTPUT);
  digitalWrite(SENSORES,HIGH);
}

void LeerDHT(){

bGlobalErr=0;
byte dht_in;
byte i;

digitalWrite(SENSORES,LOW);
delay(18);
delay(5);
digitalWrite(SENSORES,HIGH);
delayMicroseconds(40);
pinMode(SENSORES,INPUT);
delayMicroseconds(40);

dht_in=digitalRead(SENSORES);

if(dht_in){
   bGlobalErr=1;
   return;
   }
delayMicroseconds(80);

dht_in=digitalRead(SENSORES);

if(!dht_in){
   bGlobalErr=2;
   return;
   }


delayMicroseconds(80);

for (i=0; i<5; i++)
   dht_dat[i] = LeerDatosDHT();



pinMode(SENSORES,OUTPUT);
digitalWrite(SENSORES,HIGH);
byte dht_check_sum =
       dht_dat[0]+dht_dat[1]+dht_dat[2]+dht_dat[3];

if(dht_dat[4]!= dht_check_sum)
   {bGlobalErr=3;}
temperatura = dht_dat[0];
humedad = dht_dat[2];
}

byte LeerDatosDHT(){


  byte i = 0;
  byte resultado=0;
  for(i=0; i< 8; i++){

      while(digitalRead(SENSORES)==LOW);
      delayMicroseconds(30);
      if (digitalRead(SENSORES)==HIGH)
          resultado |=(1<<(7-i));
                     
    while (digitalRead(SENSORES)==HIGH);
    }
  return resultado;
}

Pero sin embardo cuando le pongo que lo saque por el display se reinicia automáticamente el arduino. ¿ Alguien sabe por que puede ser ? Aquí dejo el código donde se reinicia.

#include <LiquidCrystal.h>
#define SENSORES      52
byte celsius[8] = {
      B01110,
      B01010,
      B01110,
      B00000,
      B00000,
      B00000,
      B00000,
      B00000
};



int temperatura ; 
int humedad; 
byte bGlobalErr;
byte dht_dat[4];

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void IniciarSensor(){
  pinMode(SENSORES,OUTPUT);
  digitalWrite(SENSORES,HIGH);
}

void LeerDHT(){

bGlobalErr=0;
byte dht_in;
byte i;

digitalWrite(SENSORES,LOW);
delay(23);
digitalWrite(SENSORES,HIGH);
delayMicroseconds(40);
pinMode(SENSORES,INPUT);
delayMicroseconds(40);

dht_in=digitalRead(SENSORES);

if(dht_in){
   bGlobalErr=1;
   return;
   }
delayMicroseconds(80);

dht_in=digitalRead(SENSORES);

if(!dht_in){
   bGlobalErr=2;
   return;
   }


delayMicroseconds(80);

for (i=0; i<5; i++)
   dht_dat[i] = LeerDatosDHT();



pinMode(SENSORES,OUTPUT);

digitalWrite(SENSORES,HIGH);

byte dht_check_sum = dht_dat[0]+dht_dat[1]+dht_dat[2]+dht_dat[3];

if(dht_dat[4]!= dht_check_sum)
   {bGlobalErr=3;}

temperatura = dht_dat[0];
Serial.println(temperatura);
humedad = dht_dat[2];
Serial.println(humedad);
}

byte LeerDatosDHT(){

  byte i = 0;
  byte resultado=0;
  for(i=0; i< 8; i++){

      while(digitalRead(SENSORES)==LOW);
      delayMicroseconds(45);
      if (digitalRead(SENSORES)==HIGH)
                        resultado |=(1<<(7-i));

                     
    while (digitalRead(SENSORES)==HIGH);
    }
  return resultado;

}





void MostrarSensores()
{

            LeerDHT();
            // Temperatura
            lcd.setCursor(4,0);
            // Si es menor de 10 grado pongo un cero delante
            if ( temperatura < 10) {
                  lcd.print(0);
            }
            lcd.print(temperatura);
            // Humedad
            lcd.setCursor(12,0);
            // Si es menor de 10 grado pongo un cero delante
            if ( humedad < 10) {
                  lcd.print(0);
            }
            lcd.print(humedad);
            lcd.setCursor(6 ,1);
            lcd.print("test");

}



//# Setup
//# ==================================
void setup()
{

      // Iniciamos el sensores
      IniciarSensor();
      delay(1000); // Necesario
      lcd.begin(16,2);
      lcd.createChar(3, celsius);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("T.:     H.:   %");
      lcd.setCursor(6,0);
      lcd.write(3); // 
      lcd.setCursor(0,1);
      lcd.print("Modo: ");             

  
  Serial.begin(9600);
  Serial.println("DEBUG:");
  Serial.println("================");
  
}






//# LOOP
//# ==================================
void loop()
{

MostrarSensores();
delay(800);


}

Gracias de antemano

¿Desde dónde alimentas la pantalla? ¿Esquema?

La pantalla es esta

http://www.dfrobot.com/index.php?route=product/product&path=53&product_id=51

Y se coloca sobre el arduino, el arduino está alimentado con una fuente de alimentación de 12 V.

Y el sensor lo llevé al pin52 y le puse 5V y gnd.

Nada más, espero haberme explicado correctamente.

¿Has probado la pantalla sin el sensor? Pregunto porque el que se resetee parece que pueda ser un "Brown Out", es decir, que baje mucho la tensión en el arduino por un alto consumo y por eso se resetee :\ ¿Qué resistencia de pull-up estás usando? A ver si va a ser eso. Un poco golpes de ciego, lo reconozco :P

La pantalla la he probado sin el sensor, para ser más exactos la he probado con un sensor de temperatura ds18b20 y sin problemas, con el que tengo el problema es con este

http://www.dfrobot.com/index.php?route=product/product&path=36_64&product_id=174

Gracias por tu ayuda.

¿Para esa la pantalla no deberías utilizar la librería LCD4BIT: http://www.dfrobot.com/image/data/DFR0009/LCD4Bit_mod.zip ?
¿Has probado con esa librería?

La verdad al principio usé esa librería, pero no tenía por ejemplo para escribir caracteres especiales :-(.

A parte de eso estoy usando una librería de menús para el LCD que usa la librería estándar LiquidCrystal y el display es HD44780 compatible con lo que debería funcionar pero lo probaré mañana con calma y pondré responderé.

Si no tendría que reescribir la librería y el código que tengo, uff que pereza son una 1200 líneas.

Mañana lo pruebo