Bonjour
J'essaie d'utiliser un capteur de température DHT11 et d'afficher les mesures sur un écran LCD. Je désire afficher une chaîne de 16 caractères dans laquelle je place la valeur de température sur le première ligne, et une seconde chaîne pour l'humidité.
J'ai cependant un problème lié au format d'écriture avec sprintf, car il n'affiche pas ce que je veux.
Donc, je teste avec un autre sketch plus simple qui écrit dans la console.
Mais le sprintf ne donne pas non plus ce que je veux.
Ce choix a été effectué parce que l'ajout du traitement des float gonflait fortement l'empreinte mémoire et que bien souvent en pratique c'est inutile. Par exemple dans votre cas, Votre capteur DHT11 est capable de mesurer des températures de 0 à +50°C avec une précision de +/- 2°C et des taux d'humidité relative de 20 à 80% avec une précision de +/- 5% (donc largement plus de 1% d'humidité relative d'erreur)
Vu la précision pourquoi vous embêtez vous avec des nombre après la virgule, vous n'êtes même pas sûr des unités.
+1 avec J_M_L
En supplément les DHTXX ne traitent que des entiers, c'est les bibliothèques d'application qui effectent la division par 10 pour avoir la "vraie" valeur, les guillemets correspondent aux réserves exprimées par J_M_L.
Tu peux très bien modifier la bibliothèque (library in englische) et commenter les deux lignes qui divisent la température et l'humidité par 10.
Tu aura toujours la possibilité dans ton programme de faire cette division là où elle est réellement nécessaire.
PS : Pavlov a encore de beau jour devant lui : il y a belle lurette que le DHT22 est sorti et il est bien plus précis que la version DHT11, mais il y a encore des personnes pour le conseiller bêtement.
PS 2 :
La valeur absolue donnée par un thermomètre n'est jamais juste, sauf à utiliser des instruments de laboratoire.
Malgré cela les décimales sont utiles quand on veut comparer deux températures : si les thermomètre ne sont pas capables de donner une valeur absolue juste, ils sont capables de donner une différence de température juste et dans ce cas les décimales sont utiles.
Merci de vos réponses. Le DHT22 est en route, mais ça prend du temps donc je me fais la main avec ce que j'ai...
J'étais conscient du peu de précision, c'est pour ça que je voulais faire un format float sans chiffre après la virgule, au début. Ne comprenant pas pourquoi ça ne marchait pas, j'ai simplifié pour tester.
Donc, je dois prendre la partie entière des mesures et l'afficher avec %d ?
Ok, le "sprintf" ne gère pas les "float" sur Arduino AVR 8bits (je l'apprend).
Cela fonctionne sur une DUE ARM 32bits (je le sais).
Quelqu'un sait il si ça fonctionne sur les ESP8266 32bits (j'aimerai le savoir)?
Par contre ce qui ne serait pas respectable c'est de mal utiliser les interruptions.
Tout le monde te l'a déjà dit et je rajoute une couche : on fait le strict minimum dans une interruption car comme son nom l'indique elle interrompt le programme. Si elle dure trop longtemps tu peux perdre des informations venant d'autres capteurs par exemple.
Dans une interruption on se contente de modifier quelques variables, le moins possible.
Donc apprendre a se servir des interruptions consistera essentiellement à apprendre à programmer avec des variables que pour cet usage, pour mieux se comprendre, on affuble du nom de drapeau (ou des flag en englische).
Un drapeau n'est rien d'autre qu'une variable minimale, souvent un byte suffit, que l'on gère avec des conditions if, select ou while.
Pour apprendre, oui, pour améliorer la fluidité non
C'est un autre sujet, s'il ne fallait faire que du rationnel la vie ne serait pas drôle. On n'est pas sur un projet industriel.
L'important et que lesept soit conscient des avantages et des inconvénients des deux solutions. Je pense qu'avec toutes tes mises en gardes de bon sens c'est le cas.
AMHA s'il a la volonté d'apprendre autant commencer par un cas simple comme celui-ci.
Et s'il est courageux il pourra développer les deux solutions, comparer et conclure que côté fluidité tu as raison mais entre temps il aura appris à se servir des interruptions et les limites de leur utilisation.