Bonjour J-M-L
Je m'excuse pour ma réponse tardive mais je me replonge dans ce sujet. En relisant mon précédent message, j'ai réalisé que j'ai trop décris mon problème et je n'aurais pas du parler de la care SD qui prête a confusion. C'est le cas, si une carte SD, les paramètre de ma carte SD sont prioritaire au fichier .h Mais oublions ceci, je ferai ceci pus tard ....
Pour répondre à ta question. J'ai un fichier de configuration, par exemple station-18.h qui se trouve au même niveau que fichier.ino. Ce fichier est inclu dans fichier.ino
Voici le fichier qui répondra à la question. C'est dans ce fichier ou le bool est défini. Vois-tu?
struct t_ds18b20 { // for DS18B20 calibration
const byte pin;
float refMin; // Temperature of the ice
float refMax; // Temprature of the boiled water
float tMin; // Measure in the ice
float tMax; // Measure in the boiled water
};
struct ini_station
{
const char* nom;
const int station_id;
const bool pcb_version;
const int analogRResolution;
bool actif; //Activate station: true/false
const int32_t tx_interval; // // (sec) 15, 30, 60 (1mn), 120 (2mn), 300 (5mn), 900 (15mn), 1800 (30mn), 3600sec (1h)
const bool mprint; // Display print in the terminal
const int sd; //Activate SD card: 0=inactive; 1=active; 2=active and read config from SD
//boolean conf_from_sd = false; // If sd is active and conf_from_sd, the sensor configuration from SD will considered instead of the conf from that ino file
bool logger; // (sd must be true) If true, the station activity will be saved into the SD card
const bool oled; // Activate the OLED display
const bool rtc; // Activate the RTC DS3231 clock
const bool rtc_calibrate; // Calibrating the RTC DS3231 clock. RTC. RTC must be true (Default false)
const bool eeprom; // Activate the EEPROM chip. It must be true to save the LoRaWAN keys
const bool watchdog;
const bool sleepMode;
const int lora; // 0=unactivate LoRaWAN; 1=OTAA; 2=ABP
const bool temperature_active; // te; a;
const bool pressure_active; // pr; b;
const bool humidity_active; // hu; c
const bool luminosity_active; // lu; d;
const byte wm1_active; // w1; e;
const byte wm2_active; // w2; f;
const byte wm3_active; // w3; g;
// bool datetime_active; // da; h; // date_time_active is always the same than rtc
const bool temperature_soil_active; // ts; i; // Must define the analog pin
const byte gauge_active; // ga; j;
const bool battery_active; // ba; k;
const byte wattering_active; // ar; l;
const byte aneno_active; // an; m;
const bool irtemp_active; // ir; n;
const bool wrm_active; // wr; o
const bool bud1_active; // b1; p;
t_ds18b20 bud1_config;
const bool bud2_active; // b2; q;
t_ds18b20 bud2_config;
const bool bud3_active; // b3; r;
t_ds18b20 bud3_config;
const bool bud4_active; // b4; s;
t_ds18b20 bud4_config;
const byte sun_active; // su; t;
const byte wdirection_active; // wd; u;
const byte wdirection_offset;
const byte sf110bud_active; // sb; v;
const byte sf110leaf_active; // sl; w;
};
ini_station station = {
"Bourgepn 18", // Station name
18, // station ID (26)
true, // PCB VERSION IS > 2.0
12, // analogReadResolution
true, // station active (true or false)
900, // TX INTERVAL (sec) 15, 30, 60 (1mn), 120 (2mn), 300 (5mn), 900 (15mn), 1800 (30mn), 3600sec (1h)
true, // mprint
1, // SD card: 0=inactive; 1=active; 2=active and read config from SD
true, // LOGGER: (SD must not be 0) If true, the station activity will be saved into the SD card
false, // OLED: Active or not
false, // RTC DS3231 I2C
false, // RTC CALIBRATE RTC Must be true. Do not forget to have it back to fase after calibrating
false, // EEMPROM: Active or not
false, // Watchdog
true, // SLEEP: Active the sleep mode (Arduinolowpower)
1, // LoRaWAN: 0=unactivate; 1=OTAA; 2=ABP;
false, // te; a;
false, // pr; b;
false, // hu; c
false, // lu; d;
0, // w1; e; // 0=Unactive; 14=A0; *15=A1*; 16=A2; 17=A3; 18=A4; 19=A5
0, // w2; f; // 0=Unactive; 14=A0; 15=A1; *16=A2*; 17=A3; 18=A4; 19=A5
0, // w3; g; // 0=Unactive; 14=A0; 15=A1; 16=A2; *17=A3*; 18=A4; 19=A5
//true, // da; h; // date_time_active is always the same than rtc
false, // ts; i; // Must define the analog pin
0, // ga; j; // 0=Unactive; 14=A0; 15=A1; 16=A2; *17=A3*; 18=A4; 19=A5
true, // ba; k;
0, // ar; l; // WATTERING // 0=Unactive; 14=A0; 15=A1; 16=A2; 17=A3; *18=A4*; 19=A5
0, // an; m; // WWIND SPEED // 0=Unactive; *14=A0*; 15=A1; 16=A2; 17=A3; 18=A4; 19=A5
false, // ir; n;
false, // wr; o
true, // b1; p; // 0=Unactive; *14=A0*; 15=A1; 16=A2; 17=A3; 18=A4; 19=A5
{19,0,97,0.4, 96.9}, // b1: ds18b20 calibration: Analog pin, refMin, refMax, min, max
false, // b2; q; // 0=Unactive; 14=A0; *15=A1*; 16=A2; 17=A3; 18=A4; 19=A5
{0,0,97,0,0}, // b2; ds18b20 calibration: Analog pin, refMin, refMax, min, max
false, // b3; r; // 0=Unactive; 14=A0; 15=A1; *16=A2*; 17=A3; 18=A4; 19=A5
{0,0,97,0,0}, // b3; ds18b20 calibration: Analog pin, refMin, refMax, min, max
true, // b4; s; // 0=Unactive; 14=A0; 15=A1; 16=A2; *17=A3*; 18=A4; 19=A5
{14,0,97,0.3, 96.8}, // b4; ds18b20 calibration: Analog pin, refMin, refMax, min, max
0, // su; t; // SUN: // 0=Unactive; 14=A0; 15=A1; *16=A2*; 17=A3; 18=A4; 19=A5
0, // wd; u; // WIND DIRECTION 0=Unactive; 14=A0; *15=A1*; 16=A2; 17=A3; 18=A4; 19=A5 and the WindDirectionOffset
0, // Offset of the wind direction bar from the Noth (Degree). 0 if the bar point to the North
0, // sb; v; // 0=Unactive; 14=A0; 15=A1; *16=A2*; 17=A3; 18=A4; 19=A5
0, // sl; w; // 0=Unactive; 14=A0; 15=A1; *16=A2*; 17=A3; 18=A4; 19=A5
};
Quand ma carte démarrage, dans le setup(), je vais lire le contenu des mon fichier de configuration et le sauver dans un struc, comme je l'ai mis plus haut
capteur mesCapteur[] = {
{capteur_temperature_id, station.temperature_active, "te", 'a'},
{capteur_pressure_id, station.pressure_active, "pr", 'b'},
{capteur_humidity_id, station.humidity_active, "hu", 'c'},
{capteur_luminosity_id, station.luminosity_active, "lu", 'd'},
{capteur_wm1_id, (station.wm1_active>0)?true:false, "w1", 'e'},
{capteur_wm2_id, (station.wm2_active>0)?true:false, "w2", 'f'},
{capteur_wm3_id, (station.wm3_active>0)?true:false, "w3", 'g'},
{capteur_datetime_id, station.rtc, "da", 'h'}, //date_time_active is always the same than rtc
{capteur_temperature_soil_id, station.temperature_soil_active, "ts", 'i'},
{capteur_gauge_id, (station.gauge_active>0)?true:false, "ga", 'j'},
{capteur_battery_id, station.battery_active, "ba", 'k'},
{capteur_wattering_id, (station.wattering_active>0)?true:false, "ar", 'l'},
{capteur_aneno_id, (station.aneno_active>0)?true:false, "an", 'm'},
{capteur_irtemp_id, station.irtemp_active, "it", 'n'},
{capteur_wrm_id, station.wrm_active, "wr", 'o'},
{capteur_bud1_id, station.bud1_active, "b1", 'p'},
{capteur_bud2_id, station.bud2_active, "b2", 'q'},
{capteur_bud3_id, station.bud3_active, "b3", 'r'},
{capteur_bud4_id, station.bud4_active, "b4", 's'},
{capteur_sun_id, (station.sun_active>0)?true:false, "su", 't'},
{capteur_wdirection_id, (station.wdirection_active>0)?true:false, "wd", 'u'},
{capteur_sf110bud_id, (station.sf110bud_active>0)?true:false, "sb", 'v'},
{capteur_sf110leaf_id, (station.sf110leaf_active>0)?true:false, "sl", 'w'},
};
// dans le même ordre que mesCapteurs
enum : byte {c_temperature = 0, c_pressure, c_humidity, c_luminosity, c_wm1, c_wm2, c_wm3, c_datetime, c_temperature_soil, c_gauge, c_battery, c_wattering, c_aneno, c_irtemp, c_wrm, c_bud1, c_bud2, c_bud3, c_bud4, c_sun, c_wdirection, c_sf110bud, c_sf110leaf};
const byte nbMaxCapteurs = sizeof(mesCapteur) / sizeof(mesCapteur[0]);
byte nbCapteurActif = 0;
Pourquoi? parce que j'ai aussi un carte SD ou sont (pas obligatoirement) sauver la configuration de ma station. et pourquoi? Pour qu'un utilisateur puisse modifier la configuration de sa station via une carte SD, puisque qu'il n'aura pas accès au code et à l'IDE. Donc si une carte SD est insérée et active (station.sd), le struc ci-dessus, prendra la configuration de la carte SD, si non, il prend a configuration du fichier station-18.h
Je dois aussi dicossier un struct pour me sondes, et, un struc pour la configuration de la station, comme
- la carte SD
- l'OLED
- debug
- etc...
C'est pourquoi, j'ai ajouté ceci
/*
* ID config (Temp)
*/
const byte conf_station_active_id = 0;
const byte conf_watchdog_id = 1;
const byte conf_oled_id = 2;
const byte conf_rtc_id = 3;
const byte conf_sleepMode_id = 4;
const byte conf_sd_id = 5;
const byte conf_lora_id = 6;
// Temp
capteur stationConfig[] =
{
{conf_station_active_id, station.actif, "actif", 'a'},
{conf_watchdog_id, station.watchdog, "watchdog", 'b'},
{conf_oled_id, station.oled, "oled", 'c'},
{conf_rtc_id, station.rtc, "rtc", 'd'},
{conf_sleepMode_id, station.sleepMode, "sleepMode", 'e'},
{conf_sd_id, station.sd, "sd", 'f'},
{conf_lora_id, station.lora, "lora", 'g'},
};
// dans le même ordre
enum : byte {c_active = 0, c_watchdog, c_oled, c_rtc, c_sleepMode, c_sd, c_lora};
ce qui me permettra de faire ceci,par exemple pour la carte SD
if(stationConfig[c_sd].actif)
{
// LOG dans la carte SD, ou lis la carte SD
}
else
{
// Ignore la carte SD
}
mais voilà, il y a un truc que je n'arrive plus à m'expliquer, c'est ceci
// dans le même ordre
enum : byte {c_active = 0, c_watchdog, c_oled, c_rtc, c_sleepMode, c_sd, c_lora};
qui ressemble à ceci
// dans le même ordre que mesCapteurs
enum : byte {c_temperature = 0, c_pressure, c_humidity, c_luminosity, c_wm1, c_wm2, c_wm3, c_datetime, c_temperature_soil, c_gauge, c_battery, c_wattering, c_aneno, c_irtemp, c_wrm, c_bud1, c_bud2, c_bud3, c_bud4, c_sun, c_wdirection, c_sf110bud, c_sf110leaf};
les deux commencent par
enum : byte {
Comment le premier va faire le lien avec capteur stationConfig[]
et comment le deuxième va faire le lien avec capteur mesCapteur[]
Qu'est-ce qui fait le lien?
Je vais probablement répondre à la question, mais je reste perplexe au enum : byte {
Est-ce que enum
me permet d'avoir une forme d'indexation? par exemple
// dans le même ordre
enum : byte {c_active = 0, c_watchdog, c_oled, c_rtc, c_sleepMode, c_sd, c_lora};
c_active =0
c_watchdog=1
c_oled=2
c_rtc=3
c_sleepMode=4
c_sd=5
c_lora=6
Si maintenant je fais
if(stationConfig[c_sd].actif)
{
{
else
{
}
ca serait la même chose que ?
if(stationConfig[5].actif)
{
{
else
{
}
Il va donc me retourner la valeur définie par station.sd
qui se trouve à la 5ème position de capteur stationConfig[]
Donc, si j'ai bien compris, on s'en fiche ou se trouvent
enum : byte {c_active = 0, c_watchdog, c_oled, c_rtc, c_sleepMode, c_sd, c_lora};
et
enum : byte {c_temperature = 0, c_pressure, c_humidity, c_luminosity, c_wm1, c_wm2, c_wm3, c_datetime, c_temperature_soil, c_gauge, c_battery, c_wattering, c_aneno, c_irtemp, c_wrm, c_bud1, c_bud2, c_bud3, c_bud4, c_sun, c_wdirection, c_sf110bud, c_sf110leaf};
Ce qui importe, est l'ordre des déclarations qui doivent correspondre à "sa" struct, et que les noms (c_quelquechose) soient uniques
Est-ce que mon explication est juste?