Comment faire un for dans un struct

Donc si je comprends bien

vous avez un ensemble possible de capteurs. un capteur peut être actif ou pas.
vous devez, pour l'ensemble des capteurs actifs, enregistrer un historique de mesures.
Enfin vous devez pouvoir afficher un JSON contenant l'ensemble des valeurs lues pour l'ensemble des capteurs actifs

Vous avez donc besoin de décrire ce qu'est un capteur et c'est quoi une mesure et prévoir une zone mémoire assez large pour tous les capteurs, par exemple un tableau à 2 dimensions avec une ligne par capteur possible et n colonnes pour la mémoire des mesures

un truc du genre

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

capteur mesCapteur[] = {
  {3, true, "battery"},
  {4, true, "temperature"},
  {5, false, "pression"},
  {6, true, "humidity"},
  {7, true, "luminosity"},
};

enum : byte {battery = 0, temperature, pression, humidity, luminosity}; // dans le même ordre que mesCapteurs

const byte nbMaxCapteurs = sizeof(mesCapteur) / sizeof(mesCapteur[0]);

struct mesure {
  uint32_t chrono; // moment de la mesure
  uint16_t valeur; // valeur mesurée (adapter le type)
  // autre chose de pertinent à mémoriser lors d'une mesure ?
};

const byte tailleHistorique = 5;
mesure mesMesures[nbMaxCapteurs][tailleHistorique];


void setup() {
  Serial.begin(115200);

  // imprimer la liste des capteurs
  Serial.println(F("Liste des capteurs"));
  Serial.println(F("------------------------"));

  for (byte i = 0; i < nbMaxCapteurs; i++) {
    Serial.print(F("Capteur: ["));
    Serial.print(mesCapteur[i].nomDuCapteur);
    Serial.print(F("]\t"));
    Serial.print(F("actif: ")); Serial.print(mesCapteur[i].actif ? F("VRAI") : F("FAUX"));
    Serial.print(F("\tsur pin: ")); Serial.println(mesCapteur[i].pinDuCapteur);
  }


  // écrire une valeur, l'enum nous aide à représenter facilement le capteur
  mesMesures[battery][0].valeur = 17;
  mesMesures[battery][0].chrono = micros();

  mesMesures[humidity][3].valeur = 22;
  mesMesures[humidity][3].chrono = micros();


  // imprimer uniquement les valeurs mémorisées des capteurs actifs
  Serial.println();
  Serial.println(F("Historique des capteurs actifs"));
  Serial.println(F("------------------------"));

  for (byte i = 0; i < nbMaxCapteurs; i++) {
    if (mesCapteur[i].actif) { // si le capteur n'est pas actif on n'imprime pas
      Serial.print(F("Capteur: ["));
      Serial.print(mesCapteur[i].nomDuCapteur);
      Serial.print(F("]\t{"));
      for (byte j = 0; j < tailleHistorique; j++) {
        Serial.print(mesMesures[i][j].valeur);
        if (j < tailleHistorique - 1) Serial.print(F(","));
      }
      Serial.println(F("}"));
    }
  }
}

void loop() {}

vous affichera sur la console (réglée à 115200 bauds)

```
[color=blue]Liste des capteurs

Capteur: [battery] actif: VRAI sur pin: 3
Capteur: [temperature] actif: VRAI sur pin: 4
Capteur: [pression] actif: FAUX sur pin: 5
Capteur: [humidity] actif: VRAI sur pin: 6
Capteur: [luminosity] actif: VRAI sur pin: 7

Historique des capteurs actifs

Capteur: [battery] {17,0,0,0,0}
Capteur: [temperature] {0,0,0,0,0}
Capteur: [humidity] {0,0,0,22,0}
Capteur: [luminosity] {0,0,0,0,0}
[/color]
```

On voit bien que le capteur de pression qui est défini comme inactif n'est pas imprimé et bien sûr les plupart des valeurs sont à 0 parce que je ne les ai pas initialisées mais celles que j'ai définies (les 17 et 22) sont bien là