[AIDE] Capteur 18B20 (module) plusieurs actions

Bon, après en avoir longtemps discuté avec moi même je suis (presque) convaincu que le problème est celui que je t'avais signalé au début: tu fais le traitement même quand la valeur retournée par getTemperature est false (dans ce cas temp vaut 0)
Pour une raison inconnue (ou connue des seuls initiés) ce cas doit se produire assez souvent

Essaies le code ci dessous qui test le retour de getTemperature pour faire le traitement.

#include <OneWire.h> // Inclusion de la librairie OneWire
#define DS18B20 0x28     // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE A0 // Broche utilisée pour le bus 1-Wire

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
boolean unefois = false;
boolean unefois1 = false;

OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
//KY019 5V relay module
int relay = 7; // relay turns trigger signal - active high;

// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp) {
  byte data[9], addr[8];
  // data : Données lues depuis le scratchpad
  // addr : adresse du module 1-Wire détecté

  if (!ds.search(addr)) { // Recherche un module 1-Wire
    ds.reset_search();    // Réinitialise la recherche de module
    return false;         // Retourne une erreur
  }

  if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
    return false;                        // Si le message est corrompu on retourne une erreur

  if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
    return false;         // Si ce n'est pas le cas on retourne une erreur

  ds.reset();             // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20

  ds.write(0x44, 1);      // On lance une prise de mesure de température
  delay(800);             // Et on attend la fin de la mesure

  ds.reset();             // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20
  ds.write(0xBE);         // On envoie une demande de lecture du scratchpad

  for (byte i = 0; i < 9; i++) // On lit le scratchpad
    data[i] = ds.read();       // Et on stock les octets reçus

  // Calcul de la température en degré Celsius
  *temp = ((data[1] << 8) | data[0]) * 0.0625;

  // Pas d'erreur
  return true;
}

// setup()
void setup() {
  Serial.begin(9600); // Initialisation du port série
  lcd.begin(16, 2); //Taille LCD
  pinMode(6, OUTPUT); // LED VERTE
  pinMode(8, OUTPUT); // LED ROUGE
  pinMode(relay, OUTPUT); // Relais sortie
}

// loop()
void loop() {

  if (!unefois) {
    //Affichage TEXTE (Nom du produit) une seule fois
    lcd.setCursor(0, 0);
    lcd.print("  * X-Fresh *");
    lcd.setCursor(0, 1);
    lcd.print(" Version : 1.0");
    delay(4000);
    lcd.clear();
    unefois = true;
  }

  if (!unefois1) {
    //Affichage TEXTE (Démarrage) une seule fois
    lcd.setCursor(0, 0);
    lcd.print("Bonjour !");
    lcd.setCursor(0, 1);
    lcd.print("    Demarrage...");
    delay(1000);
    lcd.clear();
    unefois1 = true;
  }

  float temp;

  // Lit la température ambiante à ~1Hz

  bool cr = getTemperature(&temp);

  // Affiche la température
  Serial.print("Temperature : ");
  Serial.print(temp);
  Serial.write(176); // caractère °
  Serial.write('C');
  Serial.println();

  if (!cr)
    return;           // !!!!!!! On ne fait pas le traitement

  const float consigne=25;
  const float hysteresis=0.5;
  
  // Action au-dela de 25°C enclanche relais
  if (temp >= consigne) { //Conditionnement de mise en service.
    lcd.setCursor(0, 0);
    lcd.write("Arrosage actif");

    digitalWrite(8, LOW); //  VERTE ETEINTE
    digitalWrite(6, HIGH); //  ROUGE ALLUMEE
    digitalWrite(relay, HIGH); //  MOTEUR ALLUME
  }
  if (temp <= consigne - hysteresis) { //Conditionnement de mise hors service.
    lcd.setCursor(0, 0);
    lcd.write("Normal        ");

    //digitalWrite(relay, LOW); //  MOTEUR ETEINT
    digitalWrite(8, HIGH); // VERTE ALLUMEE
    digitalWrite(6, LOW); // ROUGE ETEINTE
  }
  lcd.setCursor(0, 1);
  lcd.print(temp);
  lcd.print(" C ");
}