Pulsante rosso del BoxSetter
Quando premo il pulsante rosso in long press del boxSetter csa accade?
Ecco un riassunto chiaro del flusso completo che gestisce i tuoi allarmi tramite BoxSetter, BoxInterface, EEPROM e RTC:
1️⃣ BoxSetter
-
Ha i pulsanti fisici (rosso, giallo, blu, verde).
-
Nel metodo tick():
-
Rileva long press sul pulsante rosso:
if (btnRosso.longPress()) saveFlag = true;
-
Non scrive direttamente in EEPROM né nell’RTC, ma attiva un flag interno saveFlag.
-
Metodo di accesso pubblico:
bool BoxSetter::isSaveRequested() {
bool tmp = saveFlag;
saveFlag = false;
return tmp;
}
Questo permette ad altri oggetti (BoxInterface) di sapere che l’utente ha richiesto di salvare.
2️⃣ BoxInterface
-
Contiene un riferimento a RTCManager (rtcMgr) e gestisce la comunicazione tra BoxSetter e la memoria/RTC.
-
Nel tick() di BoxInterface:
if (box.isSaveRequested()) { int ah, am, ch, cm, vw;
box.getParametri(ah, am, ch, cm, vw);
// legge valori da BoxSetter
saveParametri(ah, am, ch, cm, vw);
// scrive in EEPROM
rtcMgr->setAllarmiGiornalieri(ah, am, ch, cm); // aggiorna subito l’RTC
}
-
In pratica:
-
Legge i nuovi valori dal BoxSetter.
-
Salva i valori nella EEPROM.
-
Scrive subito i valori nei registri dell’RTC,
così non serve resettare.
3️⃣ EEPROM
4️⃣ RTCManager
-
Gestisce il DS3231.
-
Ha metodi come:
void setAllarmiGiornalieri(int ah, int am, int ch, int cm);
uint8_t leggiRegistroDS3231(uint8_t addr);
-
Quando BoxInterface chiama rtcMgr->setAllarmiGiornalieri(...),
i registri dell’RTC vengono aggiornati subito con i nuovi orari.
5️⃣ Flusso completo quando premi il pulsante rosso
-
BoxSetter rileva long press → saveFlag = true.
-
BoxInterface vede che box.isSaveRequested() è vero.
-
BoxInterface:
-
Legge i parametri dal BoxSetter (getParametri).
-
Li scrive nella EEPROM (saveParametri).
-
Aggiorna i registri dell’RTC (rtcMgr->setAllarmiGiornalieri).
-
Tutto aggiornato, non serve resettare.
💡 Vantaggio di questa architettura
|