Probleme de faire une action avec plusieurs sonde DS18B20

salut as tous , j'arrive bien as lire mes sondes sur le moniteur serie , je n'arrive pas as faire un action avec ma deuxieme sonde ;
j'ai recuperer leurs adresses . la j'avoue que je suis pommer . je doit mal mi prendre !
car avec la sonde temp_ext j'arrive bien as controler mes relais ! a premier vue elle est pas detecter.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//sonde1 = {0x28, 0xAA, 0x69, 0x58, 0x3C, 0x14, 0x01, 0x47};
//sonde2 = {0x28, 0xEF, 0xCF, 0xE0, 0x2E, 0x19, 0x01, 0x77};

LiquidCrystal_I2C lcd(0x27,16,2);

const int relais_Vent_Ext = 3;
const int relais_Comp = 4;
const int relais_Vent_Int = 5;
const int relais_V4V = 6;
const int therm_S = 51;
const int therm_Ch1 = 50;
const int led_S = 33;
const int led_Ch1 = 31;
const int led_FR = 45;
const int led_CH = 30;

float hysteresis = 2.00;
float consigne = 23.00;

void setup()

{
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();

  sensors.begin();

  pinMode(relais_Vent_Ext,OUTPUT); // Relais Ventilateur Exterieur 
  pinMode(relais_Comp,OUTPUT); // Relais Compresseur
  pinMode(relais_Vent_Int,OUTPUT); // Relais Ventilateur Interieur
  pinMode(relais_V4V,OUTPUT); // Relais Vanne 4 Voies
  pinMode(therm_S,INPUT); // Thermostat Radio Salon
  pinMode(therm_Ch1,INPUT); // Thermostat Radio Chambre1
  pinMode(led_S,OUTPUT); // LED Thermostat Salon en demande (froid ou chauffage)
  pinMode(led_Ch1,OUTPUT); // LED Thermostat Chambre en demande (froid ou chauffage)
  pinMode(led_FR,OUTPUT); // LED Mode Froid
  pinMode(led_CH,OUTPUT); // LED Mode Chauffage

}

void loop()

{
  Serial.print("Temp Démarage Arduino : ");
  Serial.println(millis());

  sensors.requestTemperatures();
  float temp_Ext = sensors.getTempCByIndex(0);
  float temp_Unit_Ext = sensors.getTempCByIndex(1);

  Serial.print("Temperature EXT °C ");
  Serial.println(temp_Ext);
  Serial.print("Temperature Unite EXT °C ");
  Serial.println(temp_Unit_Ext);

  byte etattherm_S = digitalRead(therm_S);
  byte etattherm_Ch1 = digitalRead(therm_Ch1);

  Serial.print("ETAT thermosat Salon = ");
  Serial.println(etattherm_S);
  Serial.print("ETAT thermostat Chambre 1 = ");
  Serial.println(etattherm_Ch1);
  
  lcd.setCursor(0, 0 );
  lcd.print("Temperature:");
  lcd.setCursor(1,1);
  lcd.print(temp_Ext);
  lcd.setCursor(6,1);
  lcd.print((char)223);
  delay(100);

  digitalWrite(led_S, etattherm_S);
  digitalWrite(led_Ch1, etattherm_Ch1);

  if(((temp_Ext >= consigne) && (etattherm_S == 1)) 
  || ((temp_Ext >= consigne) && (etattherm_Ch1 == 1))){
    digitalWrite(relais_Vent_Ext, LOW);// petite vitesse
    digitalWrite(relais_Vent_Int, HIGH);
    digitalWrite(relais_V4V, HIGH);
    digitalWrite(relais_Comp, LOW);
    digitalWrite(led_FR, HIGH);
    digitalWrite(led_CH, LOW);
    }else if(((temp_Ext >= consigne) && (etattherm_S == 1)) 
  || ((temp_Ext >= consigne) && (etattherm_Ch1 == 1)) && temp_Unit_Ext >= 20){
    digitalWrite(relais_Vent_Ext, HIGH);// grande viesse
    digitalWrite(relais_Vent_Int, HIGH);
    digitalWrite(relais_V4V, HIGH);
    digitalWrite(relais_Comp, LOW);
    digitalWrite(led_FR, HIGH);
    digitalWrite(led_CH, LOW);
    }else{
      digitalWrite(relais_Vent_Ext, LOW);
      digitalWrite(relais_Vent_Int, LOW);
      digitalWrite(relais_V4V, LOW);
      digitalWrite(led_FR, LOW);
      digitalWrite(led_CH, HIGH);
      }
}

Si je ne me suis pas trompé, tu regardes la valeur de ta deuxième sonde uniquement, si les conditions sur la première n'est pas rempli.
Tes deux sondes doivent être dépendante l'une de l'autre ?

oui

Ok, donc tu est bien dans le cas où temp_Ext est inférieur à consigne ou que tes deux état sont à zéro ?
Je vous aussi, que tu fais de l'affichage sur le moniteur série, cela serait plus facile pour nous, si tu nous donnais toutes les informations à ta disposition :woozy_face:
En gros si tes relais ne s'active pas, soit tu ne rentre pas dans le if, soit ils sont mal branchés.
Il peut aussi y avoir une coquille dans ton code, mais étant sur mon téléphone, c'est difficile à voir pour moi.
Peut-être qu'un autre forumeur pourrait te le confirmer :smiley:

il s'active bien avec ma premier sonde mais quand la temperature de la sonde 2 est supperieur au 20 degrer rien ne se passe le relais vent_ExT ne s'enclenche pas

Comme je te l'ai indiqué, si tu communiquais le résultat du moniteur série, cela serait bien plus facile et sûrement plus rapide de te répondre.
Donc ta sonde 2 est portée à une température supérieur à 23°C, alors que ta sonde 1 reste inférieur à 23°C?
Maintenant si tu regarde bien les conditions que tu demande dans le else if, tu verra que ce n'est pas possible de rentrer dedans car tu demande que celui soit les mêmes que le if.

en faite j'ai reussi en prenand une pin differente pour ma deuxieme sonde

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS_1 2
#define ONE_WIRE_BUS_2 3

OneWire oneWire_1(ONE_WIRE_BUS_1);
OneWire oneWire_2(ONE_WIRE_BUS_2);
DallasTemperature sensors_1(&oneWire_1);
DallasTemperature sensors_2(&oneWire_2);
//sonde1 = {0x28, 0xAA, 0x69, 0x58, 0x3C, 0x14, 0x01, 0x47};
//sonde2 = {0x28, 0xEF, 0xCF, 0xE0, 0x2E, 0x19, 0x01, 0x77};

LiquidCrystal_I2C lcd(0x27,16,2);

const int relais_Vent_Ext = 8;
const int relais_Comp = 9;
const int relais_Vent_Int = 10;
const int relais_V4V = 11;
const int therm_S = 51;
const int therm_Ch1 = 50;
const int led_S = 33;
const int led_Ch1 = 31;
const int led_FR = 45;
const int led_CH = 30;

float hysteresis = 2.00;
float consigne = 23.00;

void setup()

{
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();

  sensors_1.begin();
  sensors_2.begin();

  pinMode(relais_Vent_Ext,OUTPUT); // Relais Ventilateur Exterieur 
  pinMode(relais_Comp,OUTPUT); // Relais Compresseur
  pinMode(relais_Vent_Int,OUTPUT); // Relais Ventilateur Interieur
  pinMode(relais_V4V,OUTPUT); // Relais Vanne 4 Voies
  pinMode(therm_S,INPUT); // Thermostat Radio Salon
  pinMode(therm_Ch1,INPUT); // Thermostat Radio Chambre1
  pinMode(led_S,OUTPUT); // LED Thermostat Salon en demande (froid ou chauffage)
  pinMode(led_Ch1,OUTPUT); // LED Thermostat Chambre en demande (froid ou chauffage)
  pinMode(led_FR,OUTPUT); // LED Mode Froid
  pinMode(led_CH,OUTPUT); // LED Mode Chauffage

}

void loop()

{
  Serial.print("Temp Démarage Arduino : ");
  Serial.println(millis());

  sensors_1.requestTemperatures();
  sensors_2.requestTemperatures();
  float temp_Ext = sensors_1.getTempCByIndex(0);
  float temp_Unit_Ext = sensors_2.getTempCByIndex(0);

  float grand_V_Ext = temp_Unit_Ext >= 20;

  Serial.print("Temperature EXT °C ");
  Serial.println(temp_Ext);
  Serial.print("Temperature Unite EXT °C ");
  Serial.println(temp_Unit_Ext);

  byte etattherm_S = digitalRead(therm_S);
  byte etattherm_Ch1 = digitalRead(therm_Ch1);

  Serial.print("ETAT thermosat Salon = ");
  Serial.println(etattherm_S);
  Serial.print("ETAT thermostat Chambre 1 = ");
  Serial.println(etattherm_Ch1);
  
  lcd.setCursor(0, 0 );
  lcd.print("Temperature:");
  lcd.setCursor(1,1);
  lcd.print(temp_Ext);
  lcd.setCursor(6,1);
  lcd.print((char)223);
  delay(500);

  digitalWrite(led_S, etattherm_S);
  digitalWrite(led_Ch1, etattherm_Ch1);

  if(((temp_Ext >= consigne) && (etattherm_S == 1)) 
  || ((temp_Ext >= consigne) && (etattherm_Ch1 == 1))){
    digitalWrite(relais_Vent_Ext, LOW);// petite vitesse
    digitalWrite(relais_Vent_Int, HIGH);
    digitalWrite(relais_V4V, HIGH);
    digitalWrite(relais_Comp, LOW);
    digitalWrite(led_FR, HIGH);
    digitalWrite(led_CH, LOW);
    if(grand_V_Ext){
      digitalWrite(relais_Vent_Ext, HIGH);// grande viesse
      digitalWrite(relais_Vent_Int, HIGH);
      digitalWrite(relais_V4V, HIGH);
      digitalWrite(relais_Comp, LOW);
      digitalWrite(led_FR, HIGH);
      digitalWrite(led_CH, LOW);
      }
    }else{
      digitalWrite(relais_Vent_Ext, LOW);
      digitalWrite(relais_Vent_Int, LOW);
      digitalWrite(relais_V4V, LOW);
      digitalWrite(led_FR, LOW);
      digitalWrite(led_CH, HIGH);
      }
}


je verais plus tard pour le faire sur la meme pin car je suis debutant! 
merci as toi 

voici le code avec les 2sondes sur la meme pin , donc si vous trouver des incoherences merci de me le dire .

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2


OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors_1(&oneWire);
DallasTemperature sensors_2(&oneWire);
//sonde1 = {0x28, 0xAA, 0x69, 0x58, 0x3C, 0x14, 0x01, 0x47};
//sonde2 = {0x28, 0xEF, 0xCF, 0xE0, 0x2E, 0x19, 0x01, 0x77};

LiquidCrystal_I2C lcd(0x27,16,2);

const int relais_Vent_Ext = 8;
const int relais_Comp = 9;
const int relais_Vent_Int = 10;
const int relais_V4V = 11;
const int therm_S = 51;
const int therm_Ch1 = 50;
const int led_S = 33;
const int led_Ch1 = 31;
const int led_FR = 45;
const int led_CH = 30;

float hysteresis = 2.00;
float consigne = 23.00;

void setup()

{
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();

  sensors_1.begin();
  sensors_2.begin();

  pinMode(relais_Vent_Ext,OUTPUT); // Relais Ventilateur Exterieur 
  pinMode(relais_Comp,OUTPUT); // Relais Compresseur
  pinMode(relais_Vent_Int,OUTPUT); // Relais Ventilateur Interieur
  pinMode(relais_V4V,OUTPUT); // Relais Vanne 4 Voies
  pinMode(therm_S,INPUT); // Thermostat Radio Salon
  pinMode(therm_Ch1,INPUT); // Thermostat Radio Chambre1
  pinMode(led_S,OUTPUT); // LED Thermostat Salon en demande (froid ou chauffage)
  pinMode(led_Ch1,OUTPUT); // LED Thermostat Chambre en demande (froid ou chauffage)
  pinMode(led_FR,OUTPUT); // LED Mode Froid
  pinMode(led_CH,OUTPUT); // LED Mode Chauffage

}

void loop()

{
  Serial.print("Temp Démarage Arduino : ");
  Serial.println(millis());

  sensors_1.requestTemperatures();
  sensors_2.requestTemperatures();
  float temp_Ext = sensors_1.getTempCByIndex(0);
  float temp_Unit_Ext = sensors_2.getTempCByIndex(1);

  float grand_V_Ext = temp_Unit_Ext >= 20;

  Serial.print("Temperature EXT °C ");
  Serial.println(temp_Ext);
  Serial.print("Temperature Unite EXT °C ");
  Serial.println(temp_Unit_Ext);

  byte etattherm_S = digitalRead(therm_S);
  byte etattherm_Ch1 = digitalRead(therm_Ch1);

  Serial.print("ETAT thermosat Salon = ");
  Serial.println(etattherm_S);
  Serial.print("ETAT thermostat Chambre 1 = ");
  Serial.println(etattherm_Ch1);
  
  lcd.setCursor(0, 0 );
  lcd.print("Temperature:");
  lcd.setCursor(1,1);
  lcd.print(temp_Ext);
  lcd.setCursor(6,1);
  lcd.print((char)223);
  delay(500);

  digitalWrite(led_S, etattherm_S);
  digitalWrite(led_Ch1, etattherm_Ch1);

  if(((temp_Ext >= consigne) && (etattherm_S == 1)) 
  || ((temp_Ext >= consigne) && (etattherm_Ch1 == 1))){
    digitalWrite(relais_Vent_Ext, LOW);// petite vitesse
    digitalWrite(relais_Vent_Int, HIGH);
    digitalWrite(relais_V4V, HIGH);
    digitalWrite(relais_Comp, LOW);
    digitalWrite(led_FR, HIGH);
    digitalWrite(led_CH, LOW);
    if(grand_V_Ext){
      digitalWrite(relais_Vent_Ext, HIGH);// grande viesse
      digitalWrite(relais_Vent_Int, HIGH);
      digitalWrite(relais_V4V, HIGH);
      digitalWrite(relais_Comp, LOW);
      digitalWrite(led_FR, HIGH);
      digitalWrite(led_CH, LOW);
      }
    }else{
      digitalWrite(relais_Vent_Ext, LOW);
      digitalWrite(relais_Vent_Int, LOW);
      digitalWrite(relais_V4V, LOW);
      digitalWrite(led_FR, LOW);
      digitalWrite(led_CH, HIGH);
      }
}

sensors_1.requestTemperatures();
  sensors_2.requestTemperatures();
  float temp_Ext = sensors_1.getTempCByIndex(0);
 float temp_Unit_Ext = sensors_2.getTempCByIndex(1); 

Tu crées deux bus différents, je pense que tu dois mettre


  float temp_Unit_Ext = sensors_2.getTempCByIndex(0); `

non la temperature de la sonde 2 ne varie plus

Dsl, autant pour moi j.étais resté sur le # 8

Tu es obligé de lancer une mesure de température à chaque boucle ?
Je n.ai plus les valeurs exactes mais en fonction de la résolution choisie tu vas de 500 à 750ms pour une mesure.

oui je pense , mais le probleme est que pres de la consigne mes relais mitraille !

je viens de me lancer dans la programmation d'arduino depuis peux !

Essaie de lancer une mesure toutes les 30s pour voir. Tes relais passent d.un état à l.autre à cause de ça

Utilises la fonction millis() qui n’est pas bloquante plutôt que delay().

Après tu mettras l.intervalle que tu souhaites 1, 5 ou 10 mn selon tes souhaits de régulation

Tu as posé la même question ici (dernier post)

https://forum.arduino.cc/t/creation-dune-tempo-avec-millis-casse-tete/1153153

Essaie de garder un seul sujet sinon on saura plus ou il faut te répondre

Même réponse que dans l'autre post, inutile du coup :worried:
Fait une hystérésis.

Il me semble que tu n'utilise plus la deuxième sonde et sa variable temp_Unit_Ext?

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