Comment remplacer des #define ONE par une variable definie dans le setup()

Bonjour à tous

Je suis emprunter quant à corriger mon code. Je m’explique.

J’utilise baucoup de

#define OLED
#define SENSOR_BME280
#define ARDUINOLOWPOWER
#define QUELQUECHOSE

et encore…

Par exemple, avant mon setup() j’ai #define OLED et #define SENSOR_BME280
et plus bas je charge la librairie pour OLED

#if defined(OLED)
  #include <Adafruit_GFX.h>           // OLED
  #include <Adafruit_SSD1306.h>       // OLED
  #define SCREEN_WIDTH 128 // OLED display width, in pixels
  #define SCREEN_HEIGHT 64 // OLED display height, in pixels

  // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
  #define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
  
  const int oledDisplayFor = 15000;  // Time to display the LCD  after pressing the button in sleep mode
  int oledDisplayCount = 0;
#endif
#if defined(WATCHDOG)
  #include <Adafruit_SleepyDog.h>
#endif

#if defined(SENSOR_BME280_ADA)
  #define SEALEVELPRESSURE_HPA (1013.25)
  #include <Adafruit_BME280.h>
  Adafruit_BME280 bme; // I2C
  bool temperature_active = true;
  bool pressure_active = true;
  bool humidity_active = true;
#else
  bool temperature_active = false;
  bool pressure_active = false;
  bool humidity_active = false;
#endif

Comme vous le constatez, je défini aussi des états comme

  bool temperature_active = true;
  bool pressure_active = true;
  bool humidity_active = true;

Tout fonctionne bien.

J’ai aussi ma propre librairie.

Maintenant, j’aimerais que dans ma carte SD, je défini si, par exmple, le capteur BME280 doit etre activié ou pas.

Le problème est que ma carte SD est initiée dans le setup(), tout comme ma librarire

malibrarire.begin();

Dans mon fichier malibrairie.h je défini aussi des tructs pour les élémenets activiré ou pas
comme par exemple

struct Config {
    bool init;
    int interval;
    bool lowpower;
    bool radio;
    bool wifi;
    bool irrigation;
  };
Config _config;

  struct Config_sensors{
    bool temperature = false;
    bool pressure = false;
    bool humidity = false;
    bool luminosity =false;
    //bool datetime = true;
    bool gauge = false;
    bool battery = true;
    bool wattering = false;
    bool aneno = false;
    bool irtemp = false;
    bool lcd = false;
    bool wrm = false;
  };
Config_sensors _config_sensors;

Quand je lis ma carte SD, mon programme va dont changer l’état de ses struct, comme par exemple:

_config_sensors.lcd = false;
_config_sensors.temperture = true;
_config_sensors.humidity = false;
//etc

Le problème est que si dans ma carte, l’utilisateur a défini FALSE pour le LCD (OLED), je n’aimerais pas qu’une partie de mon code soit exécutés avant mon setup(), come par exemple l’initialisation de la Radio (LoRaWAN) ou le chargement de la libriaire pour le LCD OLED.

ceci fait très bien la chose

#define RFM95
#define OLED

Je me demande donc (mais au fond de moi même, je ne le pense pas) si c’est possible de remplacer tous mes

#define RFM95
#define OLED
#define SENSOR_BME280
#define ARDUINOLOWPOWER
#define QUELQUECHOSE

qui sont avant mon setup()

par ce qui défini dans mes strucs, comme ceci par exemple

  struct Config_sensors{
    bool temperature = false;
    bool pressure = false;
    bool humidity = false;
    bool luminosity =false;
    //bool datetime = true;
    bool gauge = false;
    bool battery = true;
    bool wattering = false;
    bool aneno = false;
    bool irtemp = false;
    bool lcd = false;
    bool wrm = false;
  };
Config_sensors _config_sensors;

qui sont initialisés dans mon setup()

:o :o :o :o

Les define sont traités à la compilation, le code, les librairies importées etc tout cela disparaît une fois compilé en fonction des define ...et aucun moyen de la faire revenir si ce n’est de recompiler

Si vous voulez pouvoir dynamiquement gérer votre installation il faut avoir TOUT le code et des if en fonction de ce qui est activable