Enregistrement pression atmo dans Eprom

bonsoir @jpbbricole
oui c'est bien ce que j'ai dit dans la phrase que tu n'a pas repris, non ?

Bonsoir terwal

Oupssss, j'ai lu trop vite :woozy_face:

Bonne nuit
jpbbricole

C’était midi pas décembre :innocent:

Oui, c'est des heures :face_with_peeking_eye:

Merci a tous.
Tout n'est pas évident pour mon niveau débutant.
Je vais commencer par un tableau pour voir si ca tourne correctement puis ensuite je verrai pour la copie sur l'eprom qui au final vu vos réponses ne me servira pas a grand chose en fait mis a part en cas de coupure de courant.

Bonjour à tous.
En suivant vos conseils je suis parti sur le choix d'un tableau 24 entrées avec un enregistrement toutes les heures.
DE ce fait mon eprom ne m'est pas utile mais vu qu'elle existe je souhaiterais y enregistrer mon tableau pour pouvoir retrouver mes valeurs en cas de coupure de courant.
Voila ce que j'ai fait

float tabpressionref[24];// declaration du tableau
float pr;
// Delai entre deux prises de mesusure pour enregistrement eprom 
const unsigned long Pressioneprom = 3600000;
// je ne mets que une partie du code mais ca va jusqu'à case 23:

  static unsigned long previousMilliseprom = 0;
  unsigned long currentMilliseprom = millis();

  /* Réalise une prise de mesure toutes les "Pressioneprom" millisecondes */
  if (currentMilliseprom - previousMilliseprom >= Pressioneprom) {
    previousMilliseprom = currentMilliseprom;
                    switch (now.hour()) {
                  case 0:
                    refpression=tabpressionref[0];
                    tabpressionref[0]=pr;
                    break;
                  case 1:
                    refpression=tabpressionref[1];
                    tabpressionref[1]=pr;
                    break;

comme ca à chaque heure je lis la valeur, je la stock dans ma variable (refpression) puis je mets à jour mon tableau avec la pression actuelle (pr)

est ce que un eprom.put comme ci dessous pourrais enregistrer mon tableau en Eprom?

EEPROM.put(1, tabpressionref);

Merci

Nico

Oui, c'est ok, tu peux même partir de 0.

et
EEPROM.get(1, tabpressionref);
pour récupérer ton tableau.

Cordialement
jpbbricole

Merci.
En 0 j'ai mon DST pour l'heure été hiver mais si jai bien compris je pourrais mettre un entrée en plus dans mon tableau et y rentrer mon DST

Bonjour nico90330

Oui, si le type de donnée de DST est compatible.

Ainsi tu aurai:
float tabpressionref[25];// declaration du tableau

DST à mettre à la fin (indice 24) pour éviter de décaler l'indice des heures, allant de 0 à 23.

Ce qui donne pour sauver DST:
tabpressionref[24] = DST;

et pour restituer:
DST = tabpressionref[24];

Cordialement
jpbbricole

J'ai un petit soucis

  tabpressionref=EEPROM.get(1, tabpressionref);
  refpression=tabpressionref[now.hour()]

me renvoie une erreur
Compilation error: invalid array assignment

Regardez ce que retourne get et comment on l’utilise

ok je regarde et j'essaye de trouver la solution tout seul :wink:

C’est plus formateur :slight_smile:

Si vous ne trouvez pas on vous aidera

Bonjour,

Je veux bien un peu d'aide parce que je cale un peu.
Je pense comprendre comment mettre mon tableau en EPROM.put mais pour récupérer les données je ne vois pas.
Merci

Nico

Regardez comment je fais dans le post 11 en lançant le wokwi

oui mai mes valeurs étant supérieures à 255 et de type float comment je peux savoir à quelle indice d'eprom est ma valeur recherchée.
Par ex si j'ai 1024.2 et 1012.12 comment savoir si 1012.12 est en eprom.get(15) ou 16 ou 17 etc...

Le plus simple

Vous allez chercher tout le tableau en eeprom et ne lisez que depuis ce tableau
Quand vous modifiez une case du tableau vous écrivez tout le tableau à nouveau.

Sinon l’opérateur sizeof vous donne le nombre d’octets utilisés par une case du tableau

int tableau[24];
const size_t tailleUnElement = sizeof tableau[0];

Pour trouver ou en mémoire est l’élément à l’index N (entre 0 et 23) la formule est alors

Adresse de départ du stockage en eeprom + N x tailleUnElement

Un int fera 2 octets sur UNO mais serait 4 octets sur un MKR ou ESP

dans le setup j'ai mis ça

EEPROM.get(1,tabpressionref);

et dans mon loop ça

se 0:
                    refpression=tabpressionref[0];
                    tabpressionref[0]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 1:
                    refpression=tabpressionref[1];
                    tabpressionref[1]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 2:
                    refpression=tabpressionref[2];
                    tabpressionref[2]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 3:
                    refpression=tabpressionref[3];
                    tabpressionref[3]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;

ca devrait marcher?

Bonjour nico90330

mets tout ton programme.

Cordialement
jpbbricole

//Lors du premier televersement mettre le DST à 0 si on est en heure d'hiver sinon à 1
//#include <Adafruit_BME280.h>
#include <Adafruit_NeoPixel.h>
#include <RTClib.h>
#include <arduino-timer.h>
#include <Wire.h>
#include <EEPROM.h>
#include <Adafruit_BME680.h>
#include <Adafruit_Sensor.h>

#define DECODER_C A3
#define DECODER_B A2
#define DECODER_D 8
#define DECODER_A A1

#define HOUR_10 3
#define HOUR_1 2
#define MINUTE_10 4
#define MINUTE_1 5
#define UNITE 13

#define POINT_DEC 6
#define CL_SEC 7
#define presplus 11
#define presmoins 10
#define buzzer 12
#define photor A0
#define ws2812 9
#define NUMPIXELS 5
#define SEALEVELPRESSURE_HPA (1013.25)

#define DISPLAY_MS 2

// Delai entre deux prises de mesusure pour enregistrement eprom 
const unsigned long Pressioneprom = 3600000;

int boutonplus = 1;
int bouton_mode_reglage = 0;

#define BLANKING_US 200
#include <LiquidCrystal_I2C.h>  // Library for LCD

LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4);
RTC_DS3231 rtc;
Adafruit_BME680 bme;  // I2C
Adafruit_NeoPixel strip (NUMPIXELS, ws2812, NEO_GRB + NEO_KHZ800);

const char *daysArray[] = { "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi" };

unsigned long debut_temps_temperature = 0;
unsigned long debut_temps_humidite = 0;
unsigned long debut_temps_pression = 0;
unsigned long debut_temps_date = 0;
unsigned long fin_temps_temperature = 0;
unsigned long fin_temps_humidite = 0;
unsigned long fin_temps_pression = 0;
unsigned long fin_temps_date = 0;
unsigned long debut_temps_reglage;

unsigned long previousMillis;

bool affiche_temperature = false;
bool affiche_humidite = false;
bool affiche_date = false;
bool affiche_pression = false;
bool spool = false;
bool spoollent = true;

byte error;

int anciennevaleur = 0;
//int btnVal  = 0;
float h;
float c;
float pr;
float tabpressionref[24];
float tableaupression;
float airq;

int indexref;
int heurepression;
int cent_t;
int centieme_t;
int dixieme_t;
int cent_h;
int centieme_h;
int dixieme_h;
int dixiemepa;
int DST;
int spoolMinute = 0;
int spoolpoison = 0;
int reglage = 0;
int nouveau_jour;
int nouveau_mois;
int nouvelle_annee;
int nouvelle_heure;
int nouvelle_minute;
int nouvelle_seconde;
int lastMinute;
int drapeau_temperature;
int drapeau_humidite;
int drapeau_pression;
int drapeau_date;
int mille;
int cent;
int dizaine;
int unitee;
int clisec = 0;  //valeur(0 ou 1) du modulo 2 soit 0 pendant 500ms puis 1 pendant 500ms
float refpression;
int diffpression;
int lcdpresent;
int startTime = 0;
int lectureluminosite;
int luminositeled;

bool lastAbove = false;
String jourenlettre;
auto timer = timer_create_default();
long annee;



void displayDigit(unsigned short digit, unsigned short pin) {
  digitalWrite(DECODER_A, (1 << 0) & digit);  //=1x2^0=2^0=1
  digitalWrite(DECODER_B, (1 << 1) & digit);  //=1x2^1=2^1=2
  digitalWrite(DECODER_C, (1 << 2) & digit);  //=1x2^2=2^2=4
  digitalWrite(DECODER_D, (1 << 3) & digit);  //=1x2^3=2^3=8
  digitalWrite(pin, HIGH);
  delay(DISPLAY_MS);
  digitalWrite(pin, LOW);
  delayMicroseconds(BLANKING_US);
}

void roll_chiffres() {  //defilement des chiffres
  if (spoolMinute < 9 && spool == true && spoollent == false) {
    spoolMinute++;
    if ((spoolMinute == 9) && (lcdpresent == 1)) {
      affichage_ecran();
    }
  } else {
    spoolMinute = 1;
    spool = false;
  }
}

void roll_lent() {  //defilement des chiffres
  if (spoolpoison < 9 && spoollent == true) {
    spool = false;
    spoolpoison++;


  } else {
    spoolpoison = 1;
    spoollent = false;
  }
}

void display_date() {

  affiche_date = true;
  debut_temps_date = millis();
  fin_temps_date = debut_temps_date;
  //lastMinute -= 1;
}

void lecture_temperature() {
  c = (bme.temperature);  // Pour capteur BME280
  h = bme.humidity;             // Pour capteur BME280
                                // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(c)) {
    return;
  }
  affiche_temperature = true;
  debut_temps_temperature = millis();
  fin_temps_temperature = debut_temps_temperature;
  cent_t = (100 * c);
  centieme_t = (cent_t) % 10;
  dixieme_t = (cent_t % 100 - centieme_t) / 10;

  //lastMinute -= 1;
}
void lecture_humidite() {
  h = bme.humidity;  // Pour capteur BME280
  affiche_humidite = true;
  debut_temps_humidite = millis();
  fin_temps_humidite = debut_temps_humidite;
  cent_h = (100 * h);
  centieme_h = (cent_h) % 10;
  dixieme_h = (cent_h % 100 - centieme_h) / 10;
  //lastMinute -= 1;
}


void affichage_ecran() {



  DateTime now = rtc.now();

  lcd.setCursor(4, 0);
  lcd.print("                ");
  lcd.setCursor(0, 0);
  jourenlettre = (daysArray[now.dayOfTheWeek()]);
  lcd.print(jourenlettre);
  lcd.print(" ");
  if ((now.day() < 10)) {
    lcd.print("0");
  }
  lcd.print(now.day(), DEC);
  lcd.print("/");
  if ((now.month() < 10)) {
    lcd.print("0");
  }
  lcd.print(now.month(), DEC);
  lcd.print("/");
  lcd.print(now.year(), DEC);
  lcd.print(" ");
  lcd.setCursor(0, 1);
  if ((now.hour() < 10)) {
    lcd.print("0");
  }
  lcd.print(now.hour(), DEC);
  lcd.print(":");
  if ((now.minute() < 10)) {
    lcd.print("0");
  }
  lcd.print(now.minute(), DEC);

  lcd.setCursor(6, 1);
  DST = EEPROM.get(0, DST);
  if (DST == 0) {
    lcd.print(" Heure hiver");
  }
  if (DST == 1) {
    lcd.print("Heure ete");
  }
  lcd.setCursor(18, 1);
  lcd.print("  ");
  lcd.setCursor(18, 1);
  lcd.print(indexref);

  lcd.setCursor(0, 2);
  c = (bme.temperature);
  h = bme.humidity;
  lcd.print("T:");
  lcd.print(c);
  lcd.print("C");
  lcd.print(" ");
  lcd.print("HR:");
  lcd.print(h);
  lcd.print("%");
  lcd.setCursor(0, 3);
  pr = (bme.readPressure() / 100.0F)+51;
  lcd.print("Pa:");
  lcd.print(pr);
  //lcd.print("Mbar ");
  //lcd.print(airq);
  //lcd.print("k");
  lcd.print(" r");
  lcd.print(refpression);
}

//void lecture_gaz() {
//airq = (bme.gas_resistance / 1000.0);
//}

void lecturepressionref() {
  refpression = (bme.readPressure() / 100.0F)+51;
  
}

void lecture_pression() {
  pr = (bme.readPressure() / 100.0F)+51;  // Pour capteur BME680
  diffpression = ((pr) - (refpression));
  dixiemepa = ((int)(pr * 10) % 10);
  affiche_pression = true;
  debut_temps_pression = millis();
  fin_temps_pression = debut_temps_pression;
  //lastMinute -= 1;
  if (pr < 1000) {
    cent = ((int)(pr) / 100);
    dizaine = ((int)(pr) / 10);
    dizaine = dizaine - cent * 10;  //chiffre des dizaines
    unitee = ((int)(pr) % 10);
  } else if (pr >= 1000) {
    mille = ((int)(pr) / 1000);
    cent = ((int)(pr) / 100);
    cent = cent - mille * 10;  //chiffre des centaines
    dizaine = ((int)(pr) / 10);
    dizaine = dizaine - cent * 10 - mille * 100;  //chiffre des dizaines
    unitee = ((int)(pr) % 10);
  }
}

void qualite_air() {
  const bool airpolue = airq < 22;
  const long currentTime = millis();
  if (airpolue) {
    if (!lastAbove) {
      startTime = currentTime;
    }
    const long deltaTime = currentTime - startTime;
    digitalWrite(buzzer, (deltaTime % 30000) < 3000 && (deltaTime % 1000) < 500);
  }
  lastAbove = airpolue;
}

void rainbow(int wait) {
  for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {
    for(int i=0; i<strip.numPixels(); i++) { 
      int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
    }
    strip.show();
    delay(wait);
  }
}

void setup() {
  pinMode(DECODER_A, OUTPUT);
  pinMode(DECODER_B, OUTPUT);
  pinMode(DECODER_C, OUTPUT);
  pinMode(DECODER_D, OUTPUT);

  pinMode(HOUR_10, OUTPUT);
  pinMode(HOUR_1, OUTPUT);
  pinMode(MINUTE_10, OUTPUT);
  pinMode(MINUTE_1, OUTPUT);
  pinMode(UNITE, OUTPUT);
  pinMode(CL_SEC, OUTPUT);  //(broche 7 en sortie pour clignotement seconde)
  pinMode(POINT_DEC, OUTPUT);
  pinMode(boutonplus, INPUT_PULLUP);
  pinMode(bouton_mode_reglage, INPUT_PULLUP);
  pinMode(presplus, OUTPUT);
  pinMode(presmoins, OUTPUT);
  pinMode(buzzer, OUTPUT);
  //pinMode(photor,OUTPUT);
  pinMode(ws2812,OUTPUT);
    strip.begin();
   strip.setBrightness(255);  // luminosité de la LED (maximum 255)


  //Heure été/hiver
  DST = EEPROM.get(0, DST);
  if (DST != 0 && DST != 1) {
    DST = 1;//lors du televersement mettre 1 si le televersement est fait en heure d'été sinon mettre 0
    EEPROM.put(0, DST);
  }

 EEPROM.get(1,tabpressionref);
  //Serial.begin(9600);
  rtc.begin();
 // rtc.adjust(DateTime(2023, 01, 20, 18, 49, 30));
 //rtc.adjust(DateTime(__DATE__, __TIME__));//mise à l'heure à l'heure du système
  bme.begin();
  Wire.begin();

   //Set up oversampling and filter initialization
  bme.setTemperatureOversampling(BME680_OS_8X);
  bme.setHumidityOversampling(BME680_OS_2X);
  bme.setPressureOversampling(BME680_OS_4X);
  bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
  //bme.setGasHeater(320, 150);  // 320*C for 150 ms

  Wire.beginTransmission(39);
  error = Wire.endTransmission();
  if (error == 0) {
    lcdpresent = 1;
    Serial.println("LCD present");
  }

  // Initiate the LCD:
  lcd.init();
  lcd.backlight();
  // Lecture pression ref au demarrage
  //refpression = (bme.readPressure() / 100.0F)+51;
  refpression =0;
  airq = (bme.gas_resistance / 1000.0);
  timer.every(100, roll_chiffres);
  timer.every(700, roll_lent);
  //timer.every(2000, lecture_gaz);

  // mise a jour des 24heures pressions ref dans le tableau avec la pression de reference mesurée
  //for (heurepression=0; heurepression <= 23; heurepression++){
  //    tabpressionref[heurepression]=refpression;
  //    } 

  affichage_ecran();
  rainbow(5);
}

void loop() {
  timer.tick();

DateTime now = rtc.now();
// Temps de la précédente mesure et actuel
  static unsigned long previousMilliseprom = 0;
  unsigned long currentMilliseprom = millis();

  /* Réalise une prise de mesure toutes les "Pressioneprom" millisecondes */
  if (currentMilliseprom - previousMilliseprom >= Pressioneprom) {
    previousMilliseprom = currentMilliseprom;
                    switch (now.hour()) {
                  case 0:
                    refpression=tabpressionref[0];
                    indexref=now.hour();
                    tabpressionref[0]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 1:
                    refpression=tabpressionref[1];
                    indexref=now.hour();
                    tabpressionref[1]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 2:
                    refpression=tabpressionref[2];
                    indexref=now.hour();
                    tabpressionref[2]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 3:
                    refpression=tabpressionref[3];
                    indexref=now.hour();
                    tabpressionref[3]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 4:
                    refpression=tabpressionref[4];
                    indexref=now.hour();
                    tabpressionref[4]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 5:
                    refpression=tabpressionref[5];
                    indexref=now.hour();
                    tabpressionref[5]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 6:
                    refpression=tabpressionref[6];
                    indexref=now.hour();
                    tabpressionref[6]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 7:
                    refpression=tabpressionref[7];
                    indexref=now.hour();
                    tabpressionref[7]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 8:
                    refpression=tabpressionref[8];
                    indexref=now.hour();
                    tabpressionref[8]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 9:
                    refpression=tabpressionref[9];
                    indexref=now.hour();
                    tabpressionref[9]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 10:
                    refpression=tabpressionref[10];
                    indexref=now.hour();
                    tabpressionref[10]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 11:
                    refpression=tabpressionref[11];
                    indexref=now.hour();
                    tabpressionref[11]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 12:
                    refpression=tabpressionref[12];
                    indexref=now.hour();
                    tabpressionref[12]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 13:
                    refpression=tabpressionref[13];
                    indexref=now.hour();
                    tabpressionref[13]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 14:
                    refpression=tabpressionref[14];
                    indexref=now.hour();
                    tabpressionref[14]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 15:
                    refpression=tabpressionref[15];
                    indexref=now.hour();
                    tabpressionref[15]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 16:
                    refpression=tabpressionref[16];
                    indexref=now.hour();
                    tabpressionref[16]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 17:
                    refpression=tabpressionref[17];
                    indexref=now.hour();
                    tabpressionref[17]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 18:
                    refpression=tabpressionref[18];
                    indexref=now.hour();
                    tabpressionref[18]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 19:
                    refpression=tabpressionref[19];
                    indexref=now.hour();
                    tabpressionref[19]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 20:
                    refpression=tabpressionref[20];
                    indexref=now.hour();
                    tabpressionref[20]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 21:
                    refpression=tabpressionref[21];
                    indexref=now.hour();
                    tabpressionref[21]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 22:
                    refpression=tabpressionref[22];
                    indexref=now.hour();
                    tabpressionref[22]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                  case 23:
                    refpression=tabpressionref[23];
                    indexref=now.hour();
                    tabpressionref[23]=pr;
                    EEPROM.put(1,tabpressionref);
                    break;
                }
   
  }


lectureluminosite=analogRead(photor);
//lectureluminosite=1023 - lectureluminosite;
luminositeled=map(lectureluminosite,0,1023,0,254);
if (luminositeled<20){
  luminositeled=0;} //Passe la luminosité à 0 en cas de faible luminosité ambiante
strip.setBrightness(luminositeled);  // luminosité de la LED (maximum 255)

if (( affiche_temperature == false) && (affiche_pression == false)){
strip.setPixelColor(0, strip.Color(255, 55, 0));
strip.setPixelColor(1, strip.Color(255, 55, 0));
strip.setPixelColor(2, strip.Color(255, 55, 0));
strip.setPixelColor(3, strip.Color(255, 55, 0));
strip.setPixelColor(4, strip.Color(255, 55, 0));}

      strip.show();

  
  qualite_air();

  //début decallage heure été/hiver
  if (now.dayOfTheWeek() == 0 && now.month() == 3 && now.day() >= 25 && now.day() <= 31 && now.hour() == 2 && now.minute() == 0 && now.second() == 0 && DST == 0) {
    rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour() + 1, now.minute(), now.second()));
    DST = 1;
    EEPROM.put(0, DST);
  } else if (now.dayOfTheWeek() == 0 && now.month() == 10 && now.day() >= 25 && now.day() <= 31 && now.hour() == 2 && now.minute() == 0 && now.second() == 0 && DST == 1) {
    rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour() - 1, now.minute(), now.second()));
    DST = 0;
    EEPROM.put(0, DST);
  }
  //fin decallage heure été/hiver

  unsigned long maintenant = millis();
  if (reglage > 0) {
    if (maintenant - debut_temps_reglage >= 10000) {
      Serial.println("Remise à 0");
      reglage = 0;
      spoollent = true;
      Serial.print(c);
      Serial.print("°C / ");
      Serial.print(h);
      Serial.print("% ");
      Serial.print("date : ");
      Serial.print(now.day());
      Serial.print("/");
      Serial.print(now.month());
      Serial.print("/");
      Serial.print(now.year());
      Serial.print("\t Heure : ");
      Serial.print(now.hour());
      Serial.print(":");
      Serial.print(now.minute());
      Serial.print(".");
      Serial.print(now.second());
      Serial.println(now.dayOfTheWeek());
    }
  }

  if (lastMinute < now.minute()) {  //Si la minute change faire un roll des chiffres
    spool = true;
  }
  if ((fin_temps_date - debut_temps_date) >= 2000) {  //temps pendant lequel sera afficher la date
    affiche_date = false;
    debut_temps_date = 0;
    fin_temps_date = 0;
    spool = false;
  }
  if ((fin_temps_pression - debut_temps_pression) >= 3000) {  //temps pendant lequel sera afficher la pression
    affiche_pression = false;
    debut_temps_pression = 0;
    fin_temps_pression = 0;
    //digitalWrite(presplus, LOW);
    //digitalWrite(presmoins, LOW);
    spool = false;
  }
  if ((fin_temps_temperature - debut_temps_temperature) >= 3000) {  //temps pendant lequel sera afficher la temperature
    affiche_temperature = false;
    debut_temps_temperature = 0;
    fin_temps_temperature = 0;
    spool = false;
  }
  if ((fin_temps_humidite - debut_temps_humidite) >= 3000) {  //temps pendant lequel sera afficher l'humidité
    affiche_humidite = false;
    debut_temps_humidite = 0;
    fin_temps_humidite = 0;
    spool = false;
  }



  if (reglage == 0) {  //fonctionnement normal
    if (spool == true) {
      displayDigit(spoolMinute, HOUR_10);
      displayDigit(spoolMinute, HOUR_1);
      displayDigit(spoolMinute, MINUTE_10);
      displayDigit(spoolMinute, MINUTE_1);
      displayDigit(spoolMinute, UNITE);
    } else if (spoollent == true) {
      displayDigit(spoolpoison, HOUR_10);
      displayDigit(spoolpoison, HOUR_1);
      displayDigit(spoolpoison, MINUTE_10);
      displayDigit(spoolpoison, MINUTE_1);
    } else if (affiche_date == true) {
      displayDigit(now.day() / 10, HOUR_10);
      displayDigit(now.day() % 10, HOUR_1);
      displayDigit(now.month() / 10, MINUTE_10);
      displayDigit(now.month() % 10, MINUTE_1);
      fin_temps_date = millis();

    } else if (affiche_pression == true) {
      affiche_humidite = false;
      if (pr < 1000) {
        displayDigit(cent, HOUR_10);
        displayDigit(dizaine, HOUR_1);
        displayDigit(unitee, MINUTE_10);
        digitalWrite(POINT_DEC, HIGH);  //point decimal
        displayDigit(dixiemepa, MINUTE_1);

      } else if (pr >= 1000) {
        displayDigit(mille, HOUR_10);
        displayDigit(cent, HOUR_1);
        displayDigit(dizaine, MINUTE_10);
        displayDigit(unitee, MINUTE_1);
        digitalWrite(POINT_DEC, LOW);
      }                        //point decimal
      displayDigit(8, UNITE);  //8 étant l'affichage des m

      digitalWrite(7, LOW);  //on stoppe le clignotement des secondes

      if (diffpression >= 2) {
        digitalWrite(presplus, HIGH);
        digitalWrite(presmoins, LOW);
        strip.setPixelColor(0, strip.Color(255, 55, 0));
        strip.setPixelColor(1, strip.Color(255, 55, 0));
        strip.setPixelColor(2, strip.Color(255, 55, 0));
        strip.setPixelColor(3, strip.Color(255, 239, 0));
        strip.setPixelColor(4, strip.Color(255, 239, 0));
      }
      if (diffpression <= -2) {
        digitalWrite(presplus, LOW);
        digitalWrite(presmoins, HIGH);
        strip.setPixelColor(0, strip.Color(96, 6, 239));
        strip.setPixelColor(1, strip.Color(96, 6, 239));
        strip.setPixelColor(2, strip.Color(255, 55, 0));
        strip.setPixelColor(3, strip.Color(255, 55, 0));
        strip.setPixelColor(4, strip.Color(255, 55, 0));        
      }
      if (diffpression > -2 && diffpression < 2) {
        digitalWrite(presplus, LOW);
        digitalWrite(presmoins, LOW);
        strip.setPixelColor(0, strip.Color(255, 55, 0));
        strip.setPixelColor(1, strip.Color(255, 55, 0));
        strip.setPixelColor(2, strip.Color(255, 55, 0));
        strip.setPixelColor(3, strip.Color(255, 55, 0));
        strip.setPixelColor(4, strip.Color(255, 55, 0));
      }
      fin_temps_pression = millis();

    } else if (affiche_temperature == true) {
      affiche_date = false;
      displayDigit((int)(c) / 10, HOUR_1);
      displayDigit((int)(c) % 10, MINUTE_10);
      displayDigit(dixieme_t, MINUTE_1);
      displayDigit(4, UNITE);         //4 étant l'affichage des °C
      digitalWrite(POINT_DEC, HIGH);  //point decimal
      fin_temps_temperature = millis();
      digitalWrite(CL_SEC, LOW);  //on stoppe le clignotement des secondes
      if (c<19){
        strip.setPixelColor(0, strip.Color(255, 255, 255));
        strip.setPixelColor(1, strip.Color(255, 255, 255));
        strip.setPixelColor(2, strip.Color(255, 255, 255));
        strip.setPixelColor(3, strip.Color(255, 255, 255));
        strip.setPixelColor(4, strip.Color(255, 255, 255));
      }if ((c>=19)&&(c<20)){
        strip.setPixelColor(0, strip.Color(0, 0, 255));
        strip.setPixelColor(1, strip.Color(0, 0, 255));
        strip.setPixelColor(2, strip.Color(0, 0, 255));
        strip.setPixelColor(3, strip.Color(0, 0, 255));
        strip.setPixelColor(4, strip.Color(0, 0, 255));
      }if ((c>=20)&&(c<23)){
        strip.setPixelColor(0, strip.Color(0, 255, 0));
        strip.setPixelColor(1, strip.Color(0, 255, 0));
        strip.setPixelColor(2, strip.Color(0, 255, 0));
        strip.setPixelColor(3, strip.Color(0, 255, 0));
        strip.setPixelColor(4, strip.Color(0, 255, 0));
      }if (c>=23){
        strip.setPixelColor(0, strip.Color(255, 0, 0));
        strip.setPixelColor(1, strip.Color(255, 0, 0));
        strip.setPixelColor(2, strip.Color(255, 0, 0));
        strip.setPixelColor(3, strip.Color(255, 0, 0));
        strip.setPixelColor(4, strip.Color(255, 0, 0));
        
      }
    } else if (affiche_humidite == true) {
      affiche_temperature = false;
      displayDigit((int)(h) / 10, HOUR_1);
      displayDigit((int)(h) % 10, MINUTE_10);
      displayDigit(dixieme_h, MINUTE_1);
      displayDigit(5, UNITE);         //5 étant l'affichage des %
      digitalWrite(POINT_DEC, HIGH);  //point decimal
      fin_temps_humidite = millis();
      digitalWrite(CL_SEC, LOW);  //on stoppe le clignotement des secondes


    } else {

      displayDigit(now.hour() / 10, HOUR_10);
      displayDigit(now.hour() % 10, HOUR_1);
      displayDigit(now.minute() / 10, MINUTE_10);
      displayDigit(now.minute() % 10, MINUTE_1);
      digitalWrite(POINT_DEC, LOW);  //point decimal
      // faire clignoter les secondes
      clisec = (millis() / 1000) % 2;
      digitalWrite(CL_SEC, clisec);
      digitalWrite(UNITE, LOW);  //on eteind la lampe unité
    }
  }

  if (reglage == 1) {  //reglage minutes

    displayDigit(now.minute() / 10, MINUTE_10);
    displayDigit(now.minute() % 10, MINUTE_1);
    displayDigit(1, HOUR_10);
    digitalWrite(CL_SEC, HIGH);
    boutonplus = digitalRead(1);
    if (boutonplus == 0) {
      debut_temps_reglage = millis();
      now.day();
      now.month();
      now.year();
      now.hour();
      nouvelle_minute = now.minute();
      nouvelle_minute++;
      if (nouvelle_minute > 59) {
        nouvelle_minute = 0;
      }
      now.second();
      delay(200);
      rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), nouvelle_minute, 0));
      rtc.now();
    }
  }
  if (reglage == 2) {  //reglage heures

    displayDigit(now.hour() / 10, HOUR_10);
    displayDigit(now.hour() % 10, HOUR_1);
    displayDigit(2, MINUTE_1);
    digitalWrite(CL_SEC, LOW);
    boutonplus = digitalRead(boutonplus);
    if (boutonplus == 0) {
      debut_temps_reglage = millis();
      now.day();
      now.month();
      now.year();
      nouvelle_heure = now.hour();
      nouvelle_heure++;
      if (nouvelle_heure > 23) {
        nouvelle_heure = 0;
      }
      now.minute();
      now.second();
      delay(200);
      rtc.adjust(DateTime(now.year(), now.month(), now.day(), nouvelle_heure, now.minute(), now.second()));
      rtc.now();
    }
  }

  if (reglage == 3) {  //jour

    displayDigit(now.day() / 10, HOUR_10);
    displayDigit(now.day() % 10, HOUR_1);
    displayDigit(3, MINUTE_1);
    boutonplus = digitalRead(boutonplus);
    if (boutonplus == 0) {
      debut_temps_reglage = millis();
      nouveau_jour = now.day();
      nouveau_jour++;
      if (nouveau_jour > 31) {
        nouveau_jour = 1;
      }
      now.month();
      now.year();
      now.hour();
      now.minute();
      now.second();
      delay(200);
      rtc.adjust(DateTime(now.year(), now.month(), nouveau_jour, now.hour(), now.minute(), now.second()));
      rtc.now();
    }
  }

  if (reglage == 4) {  //reglage mois

    displayDigit(now.month() / 10, MINUTE_10);
    displayDigit(now.month() % 10, MINUTE_1);
    displayDigit(4, HOUR_10);
    digitalWrite(7, LOW);
    boutonplus = digitalRead(1);
    if (boutonplus == 0) {
      debut_temps_reglage = millis();
      now.day();
      nouveau_mois = now.month();
      nouveau_mois++;
      if (nouveau_mois > 12) {
        nouveau_mois = 1;
      }
      now.year();
      now.hour();
      now.minute();
      now.second();
      delay(200);
      rtc.adjust(DateTime(now.year(), nouveau_mois, now.day(), now.hour(), now.minute(), now.second()));
      rtc.now();
    }
  }

  if (reglage == 5) {  //reglage annee

    displayDigit(2, HOUR_10);
    displayDigit(0, HOUR_1);
    displayDigit((now.year() - 2000) / 10, MINUTE_10);
    displayDigit((now.year() - 2000) % 10, MINUTE_1);
    digitalWrite(7, LOW);
    annee = now.year() - 2000;
    boutonplus = digitalRead(1);
    if (boutonplus == 0) {
      debut_temps_reglage = millis();
      now.day();
      now.month();
      now.hour();
      now.minute();
      nouvelle_annee = annee;
      nouvelle_annee++;
      if (nouvelle_annee > 99) {
        nouvelle_annee = 1;
      }
      now.second();
      nouvelle_annee = nouvelle_annee + 2000;
      delay(200);
      rtc.adjust(DateTime(nouvelle_annee, now.month(), now.day(), now.hour(), now.minute(), now.second()));
      rtc.now();
    }
  }

  if (reglage == 6) {  //reglage DST 0 Hiver 1 ETE

    displayDigit(DST, MINUTE_1);
    displayDigit(6, HOUR_10);
    digitalWrite(7, LOW);
    boutonplus = digitalRead(1);
    if (boutonplus == 0) {
      debut_temps_reglage = millis();
      DST++;
      if (DST > 1) {
        DST = 0;
      }
      delay(200);
      EEPROM.put(0, DST);
    }
  }
  ////////////////////////////////////////////////////////fin mode reglage////////////////////////////////////////////

  lastMinute = now.minute();
  if (now.second() == 49 && drapeau_date == 0) {
    drapeau_date = 1;
    display_date();
  }
  if (now.second() == 51 && drapeau_pression == 0) {
    affiche_pression = true;
    drapeau_pression = 1;
    pr = (bme.readPressure() / 100.0F)+51;  // Pour capteur BME280
    diffpression = ((pr) - (refpression));
    dixiemepa = ((int)(pr * 10) % 10);
    debut_temps_pression = millis();
    fin_temps_pression = debut_temps_pression;
    //lastMinute -= 1;
    if (pr < 1000) {
      cent = ((int)(pr) / 100);
      dizaine = ((int)(pr) / 10);
      dizaine = dizaine - cent * 10;  //chiffre des dizaines
      unitee = ((int)(pr) % 10);
    } else if (pr >= 1000) {
      mille = ((int)(pr) / 1000);
      cent = ((int)(pr) / 100);
      cent = cent - mille * 10;  //chiffre des centaines
      dizaine = ((int)(pr) / 10);
      dizaine = dizaine - cent * 10 - mille * 100;  //chiffre des dizaines
      unitee = ((int)(pr) % 10);
    }
  }
  if (now.second() == 54 && drapeau_temperature == 0) {
    affiche_pression = false;
    digitalWrite(presplus, LOW);
    digitalWrite(presmoins, LOW);
    drapeau_temperature = 1;
    lecture_temperature();
  }
  if (now.second() == 57 && drapeau_humidite == 0) {
    drapeau_humidite = 1;
    lecture_humidite();
    Serial.print(c);
    Serial.print("°C / ");
    Serial.print(h);
    Serial.print("% ");
    rtc.now();
    Serial.print("date : ");
    Serial.print(now.day());
    Serial.print("/");
    Serial.print(now.month());
    Serial.print("/");
    Serial.print(now.year());
    Serial.print("\t Heure : ");
    Serial.print(now.hour());
    Serial.print(":");
    Serial.print(now.minute());
    Serial.print(".");
    Serial.print(now.second());
    Serial.print(dixieme_t);
    Serial.print(dixieme_h);
    Serial.print(" Pression ");
    Serial.print(pr);
    Serial.print(" Arrondi ");
    Serial.println((int)round(pr));
    Serial.print("Gas = ");
    Serial.print(airq);
    Serial.println(" KOhms");
    Serial.print("Pressure = ");
    Serial.print(pr);
    Serial.println(" hPa");
  }

  if (now.second() == 00) {
    drapeau_temperature = 0;
    drapeau_humidite = 0;
    drapeau_pression = 0;
    drapeau_date = 0;
  }

  bouton_mode_reglage = digitalRead(0);
  if (bouton_mode_reglage == 0) {

    reglage++;
    debut_temps_reglage = millis();
    delay(500);
    if (reglage > 6) {
      reglage = 0;
    }
    Serial.println(reglage);
  }



  //Prise de reference pour difference pression à heure donnée
  //if (now.hour() == 00 && now.minute() == 00 && now.second() == 00) {
    //lecturepressionref();
  //}

//Effet arc en ciel pour chaque heure
  if ((now.hour() == 3 || now.hour() == 4|| now.hour() == 5|| now.hour() == 6|| now.hour() == 7|| now.hour() == 8|| now.hour() == 9|| now.hour() == 10|| now.hour() == 00|| now.hour() == 11|| now.hour() == 12|| now.hour() == 00|| now.hour() == 13|| now.hour() == 14|| now.hour() == 15|| now.hour() == 16|| now.hour() == 17|| now.hour() == 18|| now.hour() == 19|| now.hour() == 20|| now.hour() == 21|| now.hour() == 22|| now.hour() == 23)&& now.minute() == 00 && now.second() == 00) {
    rainbow(5);
  }
  if ((now.hour() == 00 || now.hour() == 1|| now.hour() == 2) && now.minute() == 00 && now.second() == 00) {
    rainbow(5);
  }

  //debut code pour roll toute les 15 secondes entre 2h et 3h du matin
  int heureactuelle = 60 * now.hour() + now.minute();  // récupère l'heure actuel convertie en minute
  if ((heureactuelle > 120) && (heureactuelle < 180)) {
    if ((now.second() == 14) || (now.second() == 40)) {
      spoollent = true;
    }
  }
}

Bon courage pour comprendre :rofl: :rofl: