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();
}
}