Creation d'une Tempo avec millis (casse tete)

Vous avez oublié les balises de code, merci de les rajouter


Sinon utilisez les bon types. L’expression suivante est une valeur de vérité, utilisez bool plutôt que int et utilisez HIGH et LOW pour ce que retourne digitalRead

bool fonction_FR = ((temp_Ext > 23) && (digitalRead(therm_S) == HIGH) || (temp_Ext > 23) && (digitalRead(therm_Ch1) == HIGH));

Et comme dit précédemment évitez de relire les valeurs quand vous les avez dans une variable (les 2 digitalRead ici ne sont pas nécessaires, vous avez lu les valeur quelque microsecondes plus tôt)

digitalWrite(led_S, digitalRead(therm_S));
digitalWrite(led_Ch1, digitalRead(therm_Ch1));

Bravo, l'essentiel est que tu ai compris et que tu sois débloqué.:+1:

merci as vous ! oui je vais faire souvent quelque erreur mais bon ! ca vas rentrer au fur et as mesure ; grand merci

salut les ceupins ! j'avais une question betes ? est t'il possible de mettre le programme a l'arret ou en marche ?

En allumant ou éteignant l’arduino :slight_smile:
(Sinon un bouton géré par votre code)

void loop() {
  si (le BP_pause est == LOW)
  {
    le prg est ici
  }
  sinon
  {
    pas de prog, on ne fait rien
    ou éventuellement, 
    on neutralise les commandes 
    vers les périphériques
  }
}

Les balises c'est pour quand ?

@ludomac tu as reçu de l'aide, le forum est là pour cela, mais l'aide n'est pas que pour toi, les autres doivent aussi pouvoir en profiter et la mise en forme du code y participe.
Tu as eu des demandes de mettre ton code entre balises qui ne sont toujours pas satisfaites.

Il me semble que le moins que tu puisses faire pour remercier de l'aide reçue est de respecter les règles de ce forum en plaçant le code entre balises codes.

S'il te plait, édites ton message contenant le code . Il suffit de cliquer sur le crayon à la fin du post #40.
Mais la prochaine fois avant de copier le code il faudrait indenter ton code dans l'IDE en faisant control T avant de le copier.
Tu verras immédiatement que le code devient plus lisible et cela te servira par la suite.

Merci pour ta coopération.

#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);
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;

unsigned long chrono_demar_Comp = 0; // demarage chrono

int consigne = 23; // consigne de Temperature

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

void setup()

{
  Serial.begin(115200); // config écran LCD
  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(); // lecture sonde DS18B20
  float temp_Ext = sensors.getTempCByIndex(0);
  
  Serial.print("Temperature °C ");
  Serial.println(temp_Ext);

  bool fonction_FR = temp_Ext > consigne; 

  bool modeFroid = ((fonction_FR) && (digitalRead(therm_S) == HIGH) || (fonction_FR) && (digitalRead(therm_Ch1) == HIGH));
  Serial.print("Mode FROID OK ");
  Serial.println(modeFroid);

  Serial.print("FONCTION FROID OK ");
  Serial.println(fonction_FR);

  etattherm_S = digitalRead(therm_S);
  Serial.print("ETAT thermosat Salon = ");
  Serial.println(etattherm_S);
  etattherm_Ch1 = digitalRead(therm_Ch1);
  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(modeFroid){digitalWrite(relais_Vent_Ext, HIGH);
    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);
    }
    if(!digitalRead(led_FR)){ //
      chrono_demar_Comp = millis() + 180000;
    }
    if(millis() > chrono_demar_Comp){
      digitalWrite(relais_Comp, HIGH);
      Serial.print("Compresseur ON ");
      }else{
        digitalWrite(relais_Comp, LOW);
        Serial.print("Démarage Compresseur dans : ");
        Serial.println(chrono_demar_Comp - millis());
        }
    }```

Merci d’éditer les posts qui ont du code en utilisant le :pencil2: dans la barre d’outil juste sous votre post et rajoutez les balises de de code (c’est difficilement lisible tel quel) :

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l’icône <code/> dans la barre d’outils pour indiquer que c’est du code

(Assurez vous aussi d’indenter le code correctement dans l’IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

il serait bon de (re)lire les recommandations listées dans “Les bonnes pratiques du Forum Francophone”

la patrouille est passée :face_with_hand_over_mouth: :face_with_hand_over_mouth:
ce sont les codes postés plus haut qu'il serait bien que tu mettes entre balises
avec le crayon, tu édites ton post, tu surlignes tout le code qui n'est pas bien posté.
tu le coupes, puis tu cliques sur les balises et tu colles ton code à la place des pointillés.

oups !! c'est fais!

je cherche as trouver comment creer une hysteresis mais je trouve pas grand chose de concluant , si qu'elle qu'un as une idee?

 float hystéresis = 2.00;
float consigne = 24.00;
void loop() {
  si (temp > consigne) {//si temp>24°
    froid_on();
    chauffe_off();
  }
  else if (temp < (consigne - hysteresis)) {//si temp<22°
    chauffe_on();
    froid_off();
  }
}

c'est ce que je faisait mais ca change rien sur mon programme !

#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);
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;

unsigned long chrono_demar_Comp = 0;

float hysteresis = 2.00;
float consigne = 23.00;

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

void setup()

{
  Serial.begin(115200); // config écran LCD
  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(); // lecture sonde DS18B20
  float temp_Ext = sensors.getTempCByIndex(0);
  
  Serial.print("Temperature °C ");
  Serial.println(temp_Ext);

  bool fonction_FR = temp_Ext > consigne; 
  bool modeFroid = ((fonction_FR) && (digitalRead(therm_S) == HIGH) || (fonction_FR) && (digitalRead(therm_Ch1) == HIGH));
  
  if(fonction_FR){
    modeFroid == 1;
  }else if(temp_Ext < (consigne - hysteresis)){
    modeFroid == 0;
  }
  Serial.print("Mode FROID OK ");
  Serial.println(modeFroid);

  Serial.print("FONCTION FROID ");
  Serial.println(fonction_FR);

  etattherm_S = digitalRead(therm_S);
  Serial.print("ETAT thermosat Salon = ");
  Serial.println(etattherm_S);
  etattherm_Ch1 = digitalRead(therm_Ch1);
  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(modeFroid){
    digitalWrite(relais_Vent_Ext, HIGH);
    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);
    }
    if(!digitalRead(led_FR)){ //
      chrono_demar_Comp = millis() + 180000;
    }
    if(millis() > chrono_demar_Comp){
      digitalWrite(relais_Comp, HIGH);
      Serial.print("Compresseur ON ");
      }else{
        digitalWrite(relais_Comp, LOW);
        Serial.print("Démarage Compresseur dans : ");
        Serial.println(chrono_demar_Comp - millis());
        }
    }
bool fonction_FR = temp_Ext > consigne;
 //fonction_FR sera true si tempEXT est > consigne
 // mais tu ne remets jamais fonction_FR à false !!!!!!!!!!!!


 if (fonction_FR) {
   modeFroid == 1;// non, c'est un simple = car si tu double le == c'est une comparaison
 } else if (temp_Ext < (consigne - hysteresis)) {
   modeFroid == 0;// non, c'est un simple = car si tu double le == c'est une comparaison
 }


if (fonction_FR) { //comme fonction_FR est toujours = à true
 modeFroid == 1;//mode froid devrait etre = à 1
} else if (temp_Ext < (consigne - hysteresis)) { //tu ne passe jamais ici puisque fonction_FR est toujours à true
 modeFroid == 0;
}

inspire toi de

bool fonction_FR = false;
void loop() {
  
  if (temp_Ext > consigne) {
    fonction_FR = true;
  } else if (temp_Ext < (consigne - hysteresis)) {
    fonction_FR = false;
  }
 
  if (fonction_FR) {
    modeFroid = 1;
  } else  {
    modeFroid = 0;
  }
}

salut as tous , j'ai avancer un peux dans l'acheminement de mon programme , je m'apercois que quand les sondes arrivent as la consigne les relais mitraille , il y aurais pas moyen de mettre un delais de lecture des sondes pour eviter la mitraillette ?

#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;

unsigned long chrono_demar_Comp = 0;

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(1000);

  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);
      }
      if(!digitalRead(led_FR)){
        chrono_demar_Comp = millis() + 180000;
        }
        if(millis() > chrono_demar_Comp){
          digitalWrite(relais_Comp, HIGH);
          Serial.print("Compresseur ON ");
          }else{
            digitalWrite(relais_Comp, LOW);
            Serial.print("Démarage Compresseur dans : ");
            Serial.println(chrono_demar_Comp - millis());
        }
}

Oui, il faut une hystérésis, c'est à dire une consigne différentes pour la monté et la descente.

resalut as tous je n'arrivent pas a faire une hysteresis sur ma temperauture exterieur ! j'ai bien reussi sur mon ventilo exterieur avec la temperature unit_ext (unité exterieur).

la je comprend pas ! ce que je veux c'est que les themostats stop le froid meme ci temperature exterieur est au dessu de la consigne .
et si la temperature est en dessous de la consigne les thermostats peuvent demander en attendant la consigne

merci de vos aides

#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 consigne = 23;
float hysteresis = 3;

unsigned long chrono_demar_Comp = 0;

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);
  
  bool fonction_FR_ON = temp_Ext >= consigne;
  bool fonction_FR_OFF = temp_Ext <= consigne - hysteresis;
  
  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);
  byte etatrelais_Vent_Ext =digitalRead(relais_Vent_Ext);

  Serial.print("ETAT thermosat Salon = ");
  Serial.println(etattherm_S);
  Serial.print("ETAT thermostat Chambre1 = ");
  Serial.println(etattherm_Ch1);
  Serial.print("ETAT relais_Vent_Ext = ");
  Serial.println(etatrelais_Vent_Ext);
  
  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(((fonction_FR_ON) && (etattherm_S == 1))//si temp_ext est a 23° et que j'ai soit l'un des thermostats: je lance la fonction froid  
  || ((fonction_FR_ON) && (etattherm_Ch1 == 1))){
    digitalWrite(relais_Vent_Int, HIGH);
    digitalWrite(relais_V4V, HIGH);
    digitalWrite(relais_Comp, LOW);
    digitalWrite(led_FR, HIGH);
    digitalWrite(led_CH, LOW);
    if(temp_Unit_Ext >= 20){// si temperature sonde UnitExt >= a 20°C
    digitalWrite(relais_Vent_Ext, HIGH);// etat HIGH grande viesse ok
    }else if(temp_Unit_Ext <= 18){ // si temperature sonde UnitExt <= a 18°C
    digitalWrite(relais_Vent_Ext, LOW);// etat LOW petite vitesse ok
    }
  }else{
    digitalWrite(relais_Vent_Ext, LOW);
    digitalWrite(relais_Vent_Int, LOW);
    digitalWrite(relais_V4V, LOW);
    digitalWrite(led_FR, LOW);
    digitalWrite(led_CH, HIGH);
    }if(!digitalRead(led_FR)){//tempo compresseur
      chrono_demar_Comp = millis() + 180000;
      }if(millis() > chrono_demar_Comp){
        digitalWrite(relais_Comp, HIGH);
        Serial.print("Compresseur ON ");
        }else{digitalWrite(relais_Comp, LOW);
        Serial.print("Démarage Compresseur dans : ");
        Serial.println(chrono_demar_Comp - millis());
        }
}

Je ne suis pas sûre de bien comprendre ce que tu veux, car l'explication me parait pas très claire.
tu veux.
"themostats stop le froid meme ci temperature exterieur est au dessu de la consigne", du coup qu'est ce qui ferait que tu réactive les thermostats ?
"les thermostats peuvent demander" demander à qui et quoi ?

Quel relais active/désactive le froid
Ton code me semble s'occupe surtout de l'activation des relais en fonction de la consigne.

Si tu veux désactiver les thermostats ou ne pas prendre en compte ceux ci, il faut que tu exprime cette condition, quel partie du code s'occupe de ça ?

vous y allez bout par bout et vous ne prenez pas le recul nécessaire

vous avez 4 relais

donc 16 états possibles théoriques pour ces relais

  • est-ce que certains états n'arriveront jamais ? si oui, lesquels
  • donnez un nom aux cas possibles
  • ensuite vous bâtissez un diagramme avec tous les états possibles et les conditions à tester qui font que vous pouvez basculer depuis un état vers un autre état et vous listez les actions à effectuer lors de cette transition

ça peut ressembler à un truc comme cela (sans doute avec plus de flèches et d'états)

➜ vous obtenez les éléments nécessaire pour coder votre système sous forme de machine à états finis et ce n'est pas trop difficile à coder, cf mon tuto éventuellement)

(il se peut que vous ayez besoin de plus d'états ou de mémoriser l'état précédent pour prendre certaines décisions de changement d'état)

La bibliothèque easyRun de @bricoleau offre aussi un modèle d'implémentation de machines à états, cf les exemples 3_System_monitoring