Yep!
Normalement, ce genre de sonde a besoin de temps pour gagner en précision et réalisme. Je ne saurais dire combien de temps exactement, mais tes pics et crêtes ont peut-être d'autres origines (liaison 1-wire, qualité des câbles, etc). Je ne sais pas.
La fonction : char * dtostrf(double val, signed char width, unsigned char prec, char * s) permet de convertir un double en String. C'est bien pour afficher les valeurs sur un moniteur ou un écran, mais pas vraiment l'idéal pour réaliser des calculs.
Si j'ai bien compris, tu cherches à obtenir des chiffres avec une décimale, ceci peut-être :
float new_val = val / 1.f
Une possibilité parmis d'autre je pense.
[ERRATUM]
Ça affiche 2 décimales après la virgule en fait. Peut-être faire comme tu le fais et repasser par atof() pour revenir en float.
Fin bref! Je pense que l'on peut faire ce genre d'opération mathématiquement. Par exemple :
float x = 25.1234
float virgule = x - (int(x)); // ce qui donne 25.1234 - 25 = 0.1234
float decimal = int(virgule * 10)/10; //ce qui donne (int(0.1234*10) = 1) / 10 = 0.1
// reste plus qu'à additioner.
float _decimal(float nbr)
{
float a = nbr - int(nbr); // on soustrait le nombre par son entier
float b = a*10; // on multiplie la décimale
float c = int(b); // on transforme la décimale en entier
float d = c / 10; // on divise l'entier pour le remettre après la virgule
float r = int(nbr) + d; // on additionne les résultats
return r;
}
_decimal(125.1234); // renvoie bien 125.10
Tu auras par contre toujours 2 décimales à l'affichage mais la seconde vaudra 0. Les 2 chiffres après la virgule semble être une limitation/obligation du langage.
[/ERRATUM]
Enfin, théoriquement, si l'on compte 1 seconde par sonde (750 ms + 250 pour le reste du code), tu peux réaliser 15 mesures de l'ensemble du système à la minute. Avec une marge de sécurité raisonnable, tu peux faire 10 mesures à la minutes sans trop de soucis. Cela dépend bien entendu de la pesanteur des autres traitements que l'arduino doit réaliser.
@+
Zoroastre.