Utilisation de l'eeprom, problème de variable [Résolu]

Bonjour à tous,
j’aurais besoin d’un peu d’aide afin de tirer au clair le fonctionnement de la librairie eeprom pour arduino.
J’ai créer un programme d’arrosage automatique. Afin d’éviter de perdre les reglages en cas de panne de courant, j’ai décidé de stocker certaines variables dans l’eeprom.
Au redémarrage, la carte lit l’eeprom et met à jour les variables, jusque là tout va bien.

Le problème que je rencontre vient de la ligne

if(Hour[0] == HourF[0] == Min[0] == MinF[0] == Hour[1] == HourF[1] == Min[1] == MinF[1] == Hour[2] == HourF[2] == Min[2] == MinF[2] == Hour[3] == HourF[3] == Min[3] == MinF[3]){

(la 207). L’instruction if est mal executée.
En effet, quand je fais un print, j’obtiens bien des valeurs différentes pour ces variables et le programme devrait donc rentrer dans le cas else. Pourtant, ce dernier rentre tout de même dans la boucle if.

Des idées d’où cela pourrait provenir ?

Merci et bonne journée.

Voilà le code

#include <DHT.h>
#include <DHT_U.h>
#include <DS3231.h>
#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>

int watering_nb = 0;
int number = 1;
int prevNumber = 0;
int unit = 1;               //Variables contenant le nombre d'arrosage (number), l'écran actuel (Screen), l'arrosage que l'on paramètre (Tchoice), et enfin l'heure/minute de debut/fin que l'on règle (unit)
int prevUnit = 0;
int Screen = 0;
int Tchoice = 1;

int currentHour = 0;
int currentMinute = 0;

boolean relayState = 0;
boolean LastrelayState = 1;

int Hour[4] = {0,0,0,0};  //Tableau contenant les heures de démarrage
int Min[4] = {0,0,0,0};   //Tableau contenant les minutes de démarrage

int HourF[4] = {0,0,0,0}; //Tableau contenant les heures de fin
int MinF[4] = {0,0,0,0};  //Tableau contenant les minutes de fin

int LimitsBegin[4][4] = {
  {0},
  {0,12},                 //Tableau contenant les limites min d'heure de début pour chaque nombre d'arrosage choisi
  {0,8,16},               //Exemple : 00:00 pour 1 arrosage, 00:00 et 12:00 pour 2 arrosages...
  {0,6,12,18},
};

int LimitsEnd[4][4] = {
  {23},                 //Tableau contenant les limites max d'heure de fin pour chaque nombre d'arrosage choisi               
  {11,23},              //Exemple : 23:59 pour 1 arrosage, 11:59 et 23:59 pour 2 arrosages...
  {7,15,23},
  {5,11,17,23},
};


#define relay 8
#define clk 2
#define dtr 3          //Pins de l'encodeur rotatif
#define sw 4
volatile boolean TurnDetected;
volatile boolean up;

DS3231 clock;
RTCDateTime dt;

#define DHTPIN 7
#define DHTTYPE DHT22           //Capteur DHT22
DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal_I2C lcd(0x3F, 16, 2);  //LCD

void isr0 ()  {         //Interruption pour détecter si on tourne l'encodeur
  TurnDetected = true;
  up = (digitalRead(clk) == digitalRead(dtr));
  Serial.write(up);
  delay(100);
}



int Temp = 0;       //Température et humidité
int Hum = 0;

void setup() {
  Serial.begin(9600);
  dht.begin();
  pinMode(relay, OUTPUT);
  digitalWrite(relay, HIGH);
  pinMode(clk,INPUT_PULLUP);             //Paramétrages des entrées et sortie
  pinMode(dtr,INPUT_PULLUP);  
  pinMode(sw,INPUT_PULLUP);

  
  lcd.init();
  lcd.backlight();
  lcd.createChar(0, ArrowR);   //Création des dessins
  lcd.createChar(1, ArrowL);
  lcd.createChar(2, Check);
  lcd.createChar(3, Cross);
  lcd.createChar(4, Retour);
  
  clock.begin();

  // Set sketch compiling time
  clock.armAlarm1(false);
  clock.clearAlarm1();
  clock.armAlarm2(false);
  clock.clearAlarm2();

  attachInterrupt (0,isr0,CHANGE);
  lcd.clear();
  MemoryRead();
  delay(500);
  
}

void loop() {
  
 ScreenChoice();
 
}

void mainDisp(){                           //Ecran principal (Température, Humidité et etat du relais)
    dt = clock.getDateTime();
    Hum = dht.readHumidity();
    delay(100);
    Watering();
    Temp = dht.readTemperature();
    delay(100);

    if (!(digitalRead(sw))) {           //Si bouton pressé, alors on passe à l'écran suivant
      Screen = 3;
      delay(200);
    }
     
    lcd.setCursor(0,0);                  // On va écrire en x=0, y=0
    lcd.print("Temp "); 
    lcd.print(Temp);
    lcd.setCursor(7,0);
    lcd.write(0xdf);
    lcd.print("c");
    lcd.setCursor(0,1);
    lcd.print("Hum  ");
    lcd.print(Hum);
    lcd.setCursor(7,1);
    lcd.print("%");
    lcd.setCursor(11,0);
    lcd.print("Etat:");

  if(relayState != LastrelayState) {
    lcd.clear();
    if(relayState == 0){           //Etat du relais
     lcd.setCursor(11,1);
     lcd.print("OFF");
     LastrelayState = relayState;
   }
    else if(relayState == 1){
     lcd.setCursor(11,1);
     lcd.print("ON");
     LastrelayState = relayState;
   }
  }


   if(Hour[0] == HourF[0] == Min[0] == MinF[0] == Hour[1] == HourF[1] == Min[1] == MinF[1] == Hour[2] == HourF[2] == Min[2] == MinF[2] == Hour[3] == HourF[3] == Min[3] == MinF[3]){
    lcd.setCursor(15,1);
    lcd.write(3);
   }
   else{                        //Si les heures ne sont pas configurées (tout == 0), alors on affiche une croix. Sinon on affiche un check
    lcd.setCursor(15,1);
    lcd.write(2);
   }
}


void MemoryWrite(){      //On écrit les heures stockées en mémoire


  for(int i = 0; i<4; i++){
    EEPROM.update(0+4*i, Hour[i]);
    EEPROM.update(1+4*i, Min[i]);
    EEPROM.update(2+4*i, HourF[i]);
    EEPROM.update(3+4*i, MinF[i]);
  }

  EEPROM.update(16, watering_nb);
  EEPROM.update(15, number);
  
}


void MemoryRead(){      //On lit les heures en mémoire

  for(int i = 0; i<4; i++){
    Hour[i] = EEPROM.read(0+4*i);
    Min[i] = EEPROM.read(1+4*i);
    HourF[i] = EEPROM.read(2+4*i);
    MinF[i] = EEPROM.read(3+4*i);
    Hour[i] = constrain(Hour[i], 0, 23);
    HourF[i] = constrain(HourF[i], 0, 23);
    Min[i] = constrain(Min[i], 0, 59);
    MinF[i] = constrain(MinF[i], 0, 59);
  }
  
  watering_nb = EEPROM.read(16);
  watering_nb = constrain(watering_nb, 1, 4);

  number = EEPROM.read(15);
}

Bonjour,

Ca ne fonctionne pas du tout comme tu penses
Ca fait ceci

if((((((((((((((Hour[0] == HourF[0]) == Min[0]) == MinF[0]) == Hour[1]) == HourF[1]) == Min[1]) == MinF[1]) == Hour[2]) == HourF[2]) == Min[2]) == MinF[2]) == Hour[3] == HourF[3]) == Min[3]) == MinF[3]){

On voit qu'il y a comparaison entre booléens et numériques donc ça ne va pas du tout.

Je pense que tu veux faire ça

if(Hour[0] == HourF[0] && Min[0] == MinF[0] && Hour[1] == HourF[1] && Min[1] == MinF[1] && Hour[2] == HourF[2] && Min[2] == MinF[2] && Hour[3] == HourF[3] && Min[3] == MinF[3]){

Merci beaucoup ! Le programme marche désormais.
Le problème n’apparaissait pas avant l’ajout de cette fonction “Mémoire” c’est pour cela que ça me surprenait.
Je passe le sujet en résolu.
Merci encore