dht21 fait planter script

bonjour tout le monde,
j’ouvre un autre topic concernant la sonde dht21.
dans le topic concernant une couveuse, ca fonctionne nickel.
le problème que je rencontre maintenant est quand j’insère les parties de codes pour récupérer le float h = dht.readHumidity(); float t = dht.readTemperature(); avec un autre script
ca bloque carrément le script et je vois pas de solution
pour info, j’ai
une cellule pour la lumiere
une recupération du voltage de la batterie
une carte sd sur l’ethernet shield

symptome : dès que j’inscrit les 2 lignes du dessus, ca bloque la lecture sur la carte SD et relance le script de récupération des données sur mon server ou plante carrément le script entier.

l’arduino est juste connecté sur l’usb pour les tests, cela viendrait il d’un manque de jus sur la carte pour alimenter le tout?

mes déclarations, un peu en vrac a force de faire des changements

#include <SD.h>
#include <Ethernet.h>
#include <SPI.h>
#include <TimedAction.h>
#include "DHT.h"
#define DHTPIN 7 

#define led  3
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
unsigned char ip[] = { 192,168,2,177 };
byte server[] = {xx,xx,xx,xx }; 
unsigned char gateway[] = { 192,168,2,2 };			
unsigned char mask[] = {255,255,255,0};  

int i = 1;
int compteur=0;
Client client(server, 80);
File myFile;
TimedAction timeconnection = 	TimedAction(50,connection);
int batMonPin = A0; 
int val = 0;   
float pinVoltage = 0; 
float batteryVoltage = 0;
float ratio = 5.5; 
int batMonPin1 = A3; 
int val1 = 0;
float pinVoltage1 = 0;
float batteryVoltage1 = 0;
float ratio1 = 5.5;
int led1 = 9;
int tempsaullume = 0;
int voltage = 0;
int photocellPin = A5;
int photocellVal = 0; 
 float t=0;
 float h=0;
#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);

partie setup

void setup()
{
  Serial.println("DHTxx test!");

  dht.begin();

  pinMode(3, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(photocellPin, INPUT);
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  Ethernet.begin(mac, ip, gateway, mask);
  //Ethernet.begin(mac, ip);
  Serial.begin(9600);
  Serial.println("Connexion au server");
  Serial.println();

  delay(1000);

  Serial.println("connecting...");

  if (client.connect()) {
    Serial.println("connected");
    client.println("GET /pilote/test.txt\n");
    client.println();
    if (SD.exists("test.txt")) {
      SD.remove("test.txt");
      Serial.println("effacement test.txt...");
    }
  } 
  else {
    Serial.println("connection failed");
    i=36;
  }

}

partie loop

void loop()
{
  val = analogRead(batMonPin);    // read the voltage on the divider  
  pinVoltage = val * 0.00488;       //  Calculate the voltage on the A/D pin
  batteryVoltage = pinVoltage * ratio;
  Serial.println(batteryVoltage);

  switch (i){
  case 1:
    timeconnection.check();
    //Serial.println( i );
    break;
  case 0:
    recup();
    break;
  case 10:
    ledon();
    break;
  case 20:
    Serial.println("En attente");
    break;
  case 36:
    Serial.println( i );
    resetFunc();
    break;
  case 30:
    twit();
    break; 
  case 2:
    alarm();
    break;     
  }
}

la partie de code qui fait planter même en mettant dans loop ou dans un void

      float h = dht.readHumidity();
      float t = dht.readTemperature();
      t=t-1;
      if (t < 20 || t > 21){analogWrite(led1,255);}else{analogWrite(led1,0);}
       if (isnan(t) || isnan(h)) {
        Serial.println("Failed to read from DHT");
        } else {

          Serial.print("Humidity: "); 
          Serial.print(h);
          Serial.print(" %\t");
          Serial.print("Temperature: "); 
          Serial.print(t);
          Serial.println(" *C");
        }

si quelqu’un a une idée, je prends de suite, merci