incompatibilité afficheur 7 segment et thermomètre ds18b20

Bonjour,
Je réalise actuellement un bain-marie à chocolat grâce à un arduino je précise que c’est mon premier projet et j’apprend au fur et à mesure de sa conception.
Voila la bain-marie est presque prêt voici la liste des composant:

-Potentiomètre il me sert a régler la temperature du désiré du bain-marie
-Led elle m’indique si la résistance est en chauffe
-Bouton de marche/arrêt de l’arduino
-Bouton poussoir Permet de passer au mode réglage de température ou température du thermomètre
-Relay permet la mise en route de la résistance
-Afficheur 7 segment 4 digit gérer par le librairie sevseg
-Thermomètre DS18b20 gérer par les librairies OneWire et DallastTemperature

Voila mon problème:

Lorsque j’exécute le mon code(ci dessous) sans les commande de requête de température mon afficheur fonctionne très bien.
Si j’exécute le code en entier les segments de l’afficheur se mettent à clignoter

Voici les deux lignes de requête de température:

sensors.requestTemperatures();
temperature_thermometre = 100 * sensors.getTempCByIndex(0);

Voici le code complet:

#include "SevSeg.h"
#include "OneWire.h"
#include "DallasTemperature.h"
SevSeg sevseg;
OneWire oneWire(13);
DallasTemperature sensors(&oneWire);
DeviceAddress sensorDeviceAddress;

void setup() {
byte numDigits = 4;
byte digitPins[] = {0, 1, 2, 3};
byte segmentPins[] = {4, 5, 6, 7, 8, 9, 10, 11};
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = 0; // See README.md for options
bool updateWithDelays = false; // Default. Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
sevseg.setBrightness(90);
sensors.begin(); 
sensors.getAddress(sensorDeviceAddress, 0);
sensors.setResolution(sensorDeviceAddress, 12);
//Serial.begin(9700);                                                                       //test console

}
  

void loop() {
int info_afficheur; 
boolean info_RelayLed;
int potentiometre ; 
potentiometre = analogRead(A0);
boolean bouton (0) ;
bouton = digitalRead(A1);
int temperature_thermometre;
sensors.requestTemperatures();
temperature_thermometre = 100 * sensors.getTempCByIndex(0);                                //recuperation de la temperature                                                            
int temperature_demande;
temperature_demande = map(potentiometre,0,1024,0,200);                                     //recuperation de la temperature demande sur le potentiometre affichage de de 5 en 5(0 à 95) grace a un mappping 
temperature_demande = temperature_demande * (50);
if (bouton == 0)                                                                           //affichage different suivant le bouton
{
info_afficheur = temperature_thermometre;
}
else if (bouton == 1)
{
info_afficheur = temperature_demande;
} 
if (temperature_demande >= temperature_thermometre)                                          //comparaison pour mise en chauffe du relay
{
digitalWrite(16, HIGH); 
digitalWrite(12, HIGH);
info_RelayLed = 1;  
}
else if (temperature_demande < temperature_thermometre)
{
digitalWrite(16, LOW);
digitalWrite(12, LOW);
info_RelayLed = 0;  
}
sevseg.setNumber(info_afficheur, 2);
 sevseg.refreshDisplay();



/*Serial.println("relay et led");
Serial.println(info_RelayLed);
Serial.println("temperature_demande");
Serial.println(temperature_demande);
Serial.println("temperature_thermometre");                                                      // test console
Serial.println(temperature_thermometre);
Serial.println("bouton");
Serial.println(bouton);
Serial.println("potentiometre");
Serial.println(potentiometre);*/

}

Merci à ceux qui pourrons m’aider.

cas1l:
Bonjour,
Je réalise actuellement un bain-marie à chocolat

Bonsoir

bain-marie ou tempereuse ? :grin:

Je regarderais ton code ... demain

Bonjour,

Il faut que tu appelles refreshDisplay() suffisamment rapidement pour qu'il n'y ait pas de clignotement, or la mesure avec un DS18b20 prend plusieurs centaines de ms.
Il faut que tu déclenche la mesure puis 800ms plus tard (utiliser millis()) tu la lis.

Merci pour vos réponses, j'ai essayer de mettre un delay de 800ms pour l'affichage de mon écrans. le clignotement ressemble plutôt à un "chargement" tout les segments 1 s'allume puis les 2 exct. les chiffre ne sont ainsi pas affiché .

Il ne faut surtout pas utiliser de delay(). Il faut utiliser millis()

#include "SevSeg.h"
#include "OneWire.h"
#include "DallasTemperature.h"

SevSeg sevseg;
OneWire oneWire(13);
DallasTemperature sensors(&oneWire);
DeviceAddress sensorDeviceAddress;

void setup() {
  byte numDigits = 4;
  byte digitPins[] = {0, 1, 2, 3};
  byte segmentPins[] = {4, 5, 6, 7, 8, 9, 10, 11};
  bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
  byte hardwareConfig = 0; // See README.md for options
  bool updateWithDelays = false; // Default. Recommended
  bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
  sevseg.setBrightness(90);
  sensors.begin();
  sensors.getAddress(sensorDeviceAddress, 0);
  sensors.setResolution(sensorDeviceAddress, 12);
  //Serial.begin(9700);                                                                       //test console

}


void loop() {
  int info_afficheur;
  boolean info_RelayLed;
  int potentiometre ;
  potentiometre = analogRead(A0);
  boolean bouton (0) ;
  bouton = digitalRead(A1);
  int temperature_thermometre;
  static bool mesureEnCours = false;
  static unsigned long tempsDebut;
  if (!mesureEnCours)
  {
    sensors.requestTemperatures();
    mesureEnCours = true;
    tempsDebut = millis();
  }
  else
  {
    if (millis() - tempsDebut >= 800)
    {
      // la mesure est terminée
      mesureEnCours = false;
      temperature_thermometre = 100 * sensors.getTempCByIndex(0);                                //recuperation de la temperature
      
      int temperature_demande;
      temperature_demande = map(potentiometre, 0, 1024, 0, 200);                                 //recuperation de la temperature demande sur le potentiometre affichage de de 5 en 5(0 à 95) grace a un mappping
      temperature_demande = temperature_demande * (50);
      if (bouton == 0)                                                                           //affichage different suivant le bouton
      {
        info_afficheur = temperature_thermometre;
      }
      else if (bouton == 1)
      {
        info_afficheur = temperature_demande;
      }
      if (temperature_demande >= temperature_thermometre)                                          //comparaison pour mise en chauffe du relay
      {
        digitalWrite(16, HIGH);
        digitalWrite(12, HIGH);
        info_RelayLed = 1;
      }
      else if (temperature_demande < temperature_thermometre)
      {
        digitalWrite(16, LOW);
        digitalWrite(12, LOW);
        info_RelayLed = 0;
      }
      sevseg.setNumber(info_afficheur, 2);
    }
  }
  sevseg.refreshDisplay();



  /*Serial.println("relay et led");
    Serial.println(info_RelayLed);
    Serial.println("temperature_demande");
    Serial.println(temperature_demande);
    Serial.println("temperature_thermometre");                                                      // test console
    Serial.println(temperature_thermometre);
    Serial.println("bouton");
    Serial.println(bouton);
    Serial.println("potentiometre");
    Serial.println(potentiometre);*/

}

Merci beaucoup l’écran affiche la température mais est ce que je peut abuser de votre gentillesse.
La température est affichée mais tout les 800ms l’écran clignote si je comprend bien il clignote pendant la prise de température mais il y a t-il un moyen de régler ce problème?