Cadencer l'acquisition avec un Timer

Vous utilisez millis pour déclencher l’acquisition toutes les heures et encore millis quand vous êtes en mode acquisition pour mesurer les 5 minutes

la structure du code serait comme cela (par exemple):

enum t_mode : uint8_t {DEMARRAGE, NOMINAL, ACQUISITION} etat = DEMARRAGE;

uint32_t chronoMode;
const uint32_t perdiodeAcquisition = 3600000UL; // 1h en ms

uint32_t chronoAcquisition;
const uint32_t dureeAcquisition = 300000UL; // 5 minutes en ms

void gestionMode()
{
  switch (etat) {
    case DEMARRAGE:
      // écrire ici ce que vous voulez faire comme réglages au démarrage
      // ...

      Serial.println(F("SYSTEME PRET"));
      // pour commencer par une phase d'acquisition
      chronoAcquisition = millis();
      etat = ACQUISITION;

      // pour commencer par une phase nominale
      // chronoMode = millis();
      // etat = NOMINAL;

      break;

    case NOMINAL:
      if (millis() - chronoMode >= perdiodeAcquisition) { // si le temps d'acquisition commence
        Serial.println(F("DEBUT MODE ACQUISITION"));
        chronoAcquisition = millis();
        etat = ACQUISITION;
      }
      break;

    case ACQUISITION:
      if (millis() - chronoAcquisition >= dureeAcquisition) { // si le temps d'acquisition est terminé
        Serial.println(F("FIN MODE ACQUISITION"));
        chronoMode = millis();
        etat = NOMINAL;
      }
      break;
  }
}

void setup() {
  Serial.begin(115200);
  // .... votre setup hors réglages initiaux
}

void loop() {
  gestionMode();
  if (etat == ACQUISITION) {
    // faire ici ce que vous voulez pendant la phase d'acquisition
  }
  // faire ici le reste de votre code qui fonctionne tout le temps
}
1 Like