Question sur un struct

Bonjour à tous,

Il y a un temps on m'avait aidé a faire un "grand" strcut et il ya une partie que je ne comprends plus.

Voici la première partie, je déclare les ID de mes capteurs

 /*
   ID of sensors
  */
  const byte capteur_temperature_id = 0;
  const byte capteur_pressure_id = 1;
  const byte capteur_humidity_id = 2;
  const byte capteur_luminosity_id = 3;
  const byte capteur_wm1_id = 4;
  const byte capteur_wm2_id = 5;
  const byte capteur_wm3_id = 6;
  const byte capteur_datetime_id = 7;
  const byte capteur_temperature_soil_id = 8;
  const byte capteur_gauge_id = 9;
  const byte capteur_battery_id = 10;
  const byte capteur_wattering_id = 11;
  const byte capteur_aneno_id = 12;
  const byte capteur_irtemp_id = 13;
  const byte capteur_wrm_id = 14;
  const byte capteur_bud1_id = 15;
  const byte capteur_bud2_id = 16;
  const byte capteur_bud3_id = 17;
  const byte capteur_bud4_id = 18;
  const byte capteur_sun_id = 19;
  const byte capteur_wdirection_id = 20;
  const byte capteur_sf110bud_id = 21;
  const byte capteur_sf110leaf_id = 22;

Puis mon strcut

  struct capteur
  {
    uint8_t idDuCapteur;
    boolean actif;
    const char * nomDuCapteur;
    const uint8_t codeDuCapteur;
  };

Enfin, je déclare un variabée de type capteur

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'},
  };

La deuxième partie station.temperature_active va returner true ou false

Puis j'ai ceci qui fait le sujet de ma question

// 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};
  

Mon code fonctionne très bien, mais je n'arrive plus à m'expliquer cette dernière partie que je colle. Qu'est ce qui fait le lien avec capteur mesCapteur[]

Pa exemple, plus bas j'ai cette condition


if(mesCapteur[c_bud3].actif)
{
{
else
{
}

Est-ce que cela serait simplement un index?
Ceci pourrait littéralement être remplacé par


if(mesCapteur[17].actif)
{
{
else
{
}

puisqu'il se trouve à la 17eme position

// 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};
  

ce qui me permettrait de cibler {capteur_bud3_id, station.bud3_active, "b3", 'r'}, ?

J'aimerais refaire un truc du genre mais pour les différents paramètres de ma station

Merci

En gros, je pourrais faire ceci de la même manière

  /*
   * 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;

struct capteur
  {
    uint8_t idDuCapteur;
    boolean actif;
    const char * nomDuCapteur;
    const uint8_t codeDuCapteur;
  };

  // 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 que mesCapteurs
  enum : byte {c_active = 0, c_watchdog, c_oled, c_rtc, c_sleepMode, c_sd, c_lora};
  
  
  if(stationConfig[c_sd].actif)
  {
    
  }
  else
  {
    
  }

Le dilemme de mon application est que je veux avoir un fichier de configuration qui va définir quelles capteurs sont actifs ou pas et l'état de la station (oled, sd actif... ou pas)

J'ai donc créé un fichier de config dans /Arduino/eco/station-1.h que je vais inclure dans /Arduino/eco/eco.ino

Mais ma carte $ une carte SD et qand elle est insérée, je veux permettre à l'utilisateur de définir quelles sondes sont actives ou pas depuis le fichier de la carte SD. Cela marche.

MAIS si la carte SD est insérée le fichier de configuration de la carte a priorité sur le fichier de configuration station-1.h

C'est dans le setup() que la carte SD est vérifié et s'il y a un fichier de configuration la variable

stationConfig[c_sd].actif

sera modifée soit

stationConfig[c_sd].actif = true
//ou
stationConfig[c_sd].actif = false

Puis stationConfig[c_sd].actif sera repris tout au long de mon code

D’où viennent les bool comme station.temperature_active etc ?

L’initialisation est faite à la compilation donc avec les valeurs par défaut de ces éléments. Si vous voulez que ce soit dynamique, il faut mettre à jour ces champs dans le setup ou dans la loop lors de l’évolution

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 .... :slight_smile:

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?

Comment? Je ne suis pas sûr de vous suivre…

Un .h est traité à la compilation. Un fichier sur la carte SD même s’il s’appelle .h ne sera pas pris en compte à l’exécution. Il faut le lire, extraire l’info et remplir la structure.
C’est ce que vous faites ??

Pour la question sur enum, oui les noms donnés dans l’énumération prennent une valeur séquentielle si elle ne leur est pas affectée, mais la encore je ne comprends pas la question…

Bonjour J-M-L
Mais non, toutes mes excuses, c'es pas dans le setup que mon struct va pendre les valeurs du fichier station-18.h, mais au moment de sa déclaration

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'},
  };

(J'aimerais faire la même chose avec les propriétés de ma carte (oled, sd, active etc))

mais dans le setup, la carte SD est lue (si elle est activée) et là, il va lire la configuration qui peut etre modifiée par l'utilisteur et corriger la struc

exemple


station.oled = false; // ou true

PS1: Je suis en train de refaire mon script et je n'ai pas encore fait cette partie de la carte, mais cela est fait dans mon ancien fichier. Je n'ai pas encore importer cette partie dans le nouveau. Je le ferai plus tard.

Si non, ma théorie, dans mon précédent message, a du sens?

Milles mercis pour vos lumières!
Vous êtes souvent là, et j'apprécie
Bonne soirée

postez le code quand il sera prêt :slight_smile:

oui mais préoccupation sont ces deux struc :grinning:
Je ne vais pas faire le code pour le coté SD tout de suite car pour le moment mes stations fonctionne sans la carte SD pour économiser la batterie et j'ai pas mal de truc a faire pour ce printemps (irrigation des sols)
Merci et bonne soirée

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.