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