Pb affichage température en chiffre décimal sur TM1637

Bonjour
B
J'ai récupéré sur internet un programme qui exploite le capteur de température DS18B20 de chez dallas et l'affiche sur un afficheur TM1637, je l'utilise avec un arduino nano.
Le programme fonctionne mais je n'arrive qu'a afficher la valeur entière de la température, pourtant si je regarde l'émulateur série elle s'affiche bien avec un ou deux chiffres après la virgule selon que je demande un ou deux.
Tous les montages que j'ai trouvé sur le net n'affiche qu'une valeur entière, j'ai eu beau cherché sur le net ou dans le datasheet du capteur ou de l'afficheur , je ne comprends pas ou est le problème.
Pour info je ne suis pas informaticien, j'ai fait des études d'électronique dans ma jeunesse et j'ai repris 40 ans plus tard les bidouillages avec les petits modules arduino.
Merci d'avance à celui qui pourra m'aiguiller sur la bonne piste.
Ci dessous le programme:

#include <OneWire.h>
#include <DallasTemperature.h>
#include <TM1637Display.h>

// Sensor input pin
#define DATA_PIN 8
// How many bits to use for temperature values: 9, 10, 11 or 12
#define SENSOR_RESOLUTION 11
// Index of sensors connected to data pin, default: 0
#define SENSOR_INDEX 0

OneWire oneWire(DATA_PIN);
DallasTemperature sensors(&oneWire);
DeviceAddress sensorDeviceAddress;
DeviceAddress sensor1;
TM1637Display display(2, 3);

unsigned int temperature = 0;
byte PreviousValue = 0;

void setup() {
  Serial.begin(9600);

  sensors.begin();
  

    display.setBrightness(0);  // set display to maximum brightness

  if (!sensors.getAddress(sensor1, 0)) {
    Serial.println("Sensor not found!");
  }
  sensors.getAddress(sensorDeviceAddress, 0);
  sensors.setResolution(sensorDeviceAddress, SENSOR_RESOLUTION);
}

void loop() {
  sensors.requestTemperatures();
  // Measurement may take up to 750ms

  float temperatureInCelsius = sensors.getTempCByIndex(SENSOR_INDEX);
  float temperatureInFahrenheit = sensors.getTempFByIndex(SENSOR_INDEX);


  display.showNumberDec(temperatureInCelsius, false, 4, 0);

  delay(2000);
  display.clear();

Je crois qu'il faut que tu multiplie par 100 ta valeur pour avoir une valeur à deux décimal sur 4 chiffres et afficher le point décimal.
Je n'ai pas le prototypage de la fonction showNumberDec, mais je crois que le premier paramètre est un entier(integer).
le 3 ieme paramètre permet d'afficher le point décimal à la bonne position, donc j'aurais mis 2 ou 1.

J'ai retrouver la documentation, pourquoi tu n'utilise pas plutôt showNumber ?

Cette fonction affiche un entier pas un nombre décimal.
Si tu veux faire afficher 2 décimales il faut le multiplier par 100.
Si tu veux faire afficher la point décimal il faut utiliser la variante de cette commande dans laqulle on ajoute un argument qui donne la position de la virgule
void showNumberDecEx(uint16_t num, uint8_t dots = 0, bool leading_zero = false, uint8_t length = 4, uint8_t pos = 0);

Ce qui devrait donner quelque chose dans ce genre si je ne me trompe pas
display.showNumberDecEx((int)(temperatureInCelsius * 100.0), 0b01000000, false, 4, 0);

Tu peux voir la syntaxe de cette fonction dans le fichier TM1637Display.h

Edit: Après, il ne faut pas s'attendre à un miracle. Le 18B20 est précis au ½ degrés près.

Merci beaucoup pour vos réponses c'était tout bête et effectivement ça marche , comme quoi quand on à pas les bases de la programmation on peu chercher longtemps et la multiplication pour avoir les chiffres après la virgule je n'y aurais pas pensé, c'est pas toujours facile de déchiffrer les librairies.
pour la précision je sais mais un seul chiffre me suffit.
Merci beaucoup encore une fois

Merci mais j'avais essayé aussi sans résultat et comme je n'ai connu que l'assembleur il y a très longtemps , le langage c pour moi c'est en autodidacte, je comprenais bien que le soucis venait au niveau de la variable mais j'étais un peu bloqué dans mon raisonnement , pour le point j'avais trouvé tout seul en regardant la doc du tm1637 mais pour les chiffres après la virgule je ne suis pas le seul à m'être cassé les dents.
merci pour vos réponses

Pas de soucis, on a tous un jour bloqué sur un problème de ce genre :slight_smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.