[résolu]ds18b20, fonction qui renvoi la température précédente ?!!

Bonjour a tous,
j'ai un petit souci avec une sonde de température ds18b20:
Une sonde branché sur une nano équiper d'un module de TX/RX 433mhz low cost.
J’interroge la nano a distance grâce a un signal transmis en 433mhz , celle ci exécute une fonction qui li la température et la retourne via 433mhz.
Mon problème c'est que chaque fois que je laisse passer une heure et que la température a beaucoup changé la première valeur de température lu par la fonction et l'ancienne température : si a 15 heure j'ai lu 11.2°c a 16 heure si j’interroge la nano distante elle me donnera 11.2°c et si de suite je ré-interoge elle me donne la vrai température 9.3°c.
Pour tester j'ai mis un pc portable avec la nano distante et debuger la température avec un "Serial.println(temperature)" le résultat et le même, le problème est dans la fonction (je crois?).
J'ai aussi tester d'appeler plusieurs fois la fonction "getTemp()" avant d'envoyer le résultat mais même problème...
Je suis un peux a court d'idée pour résoudre mon problème!
Quelqu'un pour me filer un ptit coup de main?
Merci d'avance a ceux qui voudrons m'aider.

la fonction que j'utilise:

float getTemp()
{
  //returns the temperature from one DS18S20 in DEG Celsius
 
  byte data[9];
  byte addr[8];
 
  if ( !ds.search(addr)) {
      //no more sensors on chain, reset search
      ds.reset_search();
      return -1000;
  }
 
  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return -1000;
  }
 
  if ( addr[0] != 0x10 && addr[0] != 0x28) {
      Serial.print("Device is not recognized");
      return -1000;
  }
 
  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power on at the end
  
  
  byte present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE); // Read Scratchpad
 
   
  for (int i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read();
  }
   
  ds.reset_search();
   
  byte MSB = data[1];
  byte LSB = data[0];
 
  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  float TemperatureSum = tempRead / 16;
   
  return TemperatureSum;
   
}//fin getTemp

la partie du code ou je l'appelle:

float temperature = getTemp();
                Serial.print("temperature = ");
                Serial.println(temperature);//ex: 14.06 ou 5.69

Je ne connais pas trop c'est capteurs car je ne les ai jamais utilisés mais je suis surpris qu'il n'y ait pas de temporisation entre le lancement de la conversion et la lecture du résultat sachant que d'après la doc du composant la conversion prend 750ms.
Tout est là: http://datasheets.maximintegrated.com/en/ds/DS18S20.pdf

D'ailleurs si tu regardes là: http://playground.arduino.cc/Learning/OneWire#.UwJyuR8nrqU il y a une temporisation d'une seconde avant la lecture.

Merci pour ta réponse.
Je teste ça...

cutprod:
Merci pour ta réponse.
Je teste ça...

a resolution max (la precision ne changeant pas ) , si tu ne laisse pas de temps (1 seconde est un bon compromis)
entre demande d'acquisition et lecture du scrtachpad , tu reste sur la derniere acquisition "terminée" , sous reserve que le compo soit resté alimenté (en parasitic power ou en direct)

le bus 1W est tres agreable, mais il faut savoir que c'est un bus "tres lent"

a priori l'erreur venait de la!
la température extérieur chez moi n'a pas beaucoup varier +- 0.7°c, mais en faisant les relevés je ne me retrouve plus avec la dernière température relevé.
Merci a vous pour votre aide, j’attends demain pour mettre le sujet en "résolut" pour être sur.

Bonjour,

1 seconde c'est un peu long (mais si on n'est pas pressé c'est pas bien grave).
Perso je met une temporisation de 800ms, ça marche nickel.