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
}