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 ![]()
Bonne nuit
jpbbricole
C’était midi pas décembre ![]()
Oui, c'est des heures ![]()
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 ![]()
C’est plus formateur ![]()
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
![]()