Capteur DS18B20

Voici le code que j'utilise et qui ne marche avec la sonde ds18b20 waterproof

#include <OneWire.h>

// http://www.pjrc.com/teensy/td_libs_OneWire.html

OneWire  ds(10);  // on pin 10 (a 4.7K resistor is necessary)

byte present = 0;
byte data[12];
// byte addr[8] = {0x28, 0x09, 0x53, 0x66, 0x00, 0x00, 0x00, 0xCA}; // DS18B20 test artouste OK
byte addr[8] = {0x28, 0xFF, 0x53, 0x5B, 0x3C, 0x04, 0x00, 0x81}; // DS18B20 scan TURW
float celsius;
unsigned int delact=1000; // delai de reactualisation temp ne doit pas etre < à 750 pour 12bits
unsigned long lastconv; 
// unsigned long inconv; // pour test durée lecture temp
void setup(void) {
  Serial.begin(9600);
}
void loop(void) {
  temp(); // là la loop ne fait qu'appeller la fonction temp()
}

void temp(void) { // fonction temp non bloquante de reactualisation de temperature

if (millis()>lastconv+delact) { //si le delai de reactu n'est pas atteint , on zappe
  // inconv=millis(); // entrée lecture temp
  present = ds.reset();
  ds.select(addr);
  ds.write(0xBE);         // Lecture Scratchpad
  for ( byte i = 0; i < 9; i++) {           
    data[i] = ds.read();
  }

  int16_t raw = (data[1] << 8) | data[0];

  celsius = (float)raw / 16.0;
  //Serial.println(millis()-inconv); // debug
  Serial.println(celsius);

  // demande de conversion
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);
  lastconv=millis();
}
}