Stap 10: Koelkast Open tijd bijhouden
Nu we een manier hebben van het bijhouden van tijd, nodig hebben we om bij te houden wanneer de koelkast deur open is (aka wanneer wij gevoel licht). We moeten eerst, sommige constanten in de buurt van de bovenkant van onze schets toevoegen voor onze waarschuwing-parameters:
// Constants for warning thresholds and repeat intervals const uint32_t OPEN_WARNING_TIME_SEC = 60; const uint32_t OPEN_WARNING_INTERVAL_SEC = 15;
We moeten ook enkele globale variabelen voor het bijhouden van de lichte staat toevoegen. Voeg deze boven Setup:
// Global variables for warning tracking boolean bLightOn = false; uint32_t nLightOnStart = 0; uint32_t nLastLightOnWarning = 0;
En we kunnen updaten onze loop door te vervangen
// Check the light condition, if LIGHT ... if (lightCheck() == "LIGHT") { warningTone( OPEN_WARNING_TONE, OPEN_WARNING_DURATION_MS, 1 ); } // Output approxRunTime() for testing Serial.print( approxRunTime() ); Serial.println( "ms" );
met
// Check the light condition, if LIGHT ... if (lightCheck() == "LIGHT") { // ... if it was not light last time through loop ... if (!bLightOn) { // ... set light on flag and reset light on duration. bLightOn = true; nLightOnStart = approxRunTime(); } else { // If it was light before and the light has been on longer than our warning threshold ... if ( (approxRunTime() - nLightOnStart) >= (OPEN_WARNING_TIME_SEC * 1000) ) { // ... and if our last light on warning was longer ago than our interval ... if ( (approxRunTime() - nLastLightOnWarning) >= (OPEN_WARNING_INTERVAL_SEC * 1000) ) { // ... then reset our last warning time ... nLastLightOnWarning = approxRunTime(); // ... and play warning tone. warningTone( OPEN_WARNING_TONE, OPEN_WARNING_DURATION_MS, 1 ); } } } } else { // If not LIGHT, ensure light on flag is false. bLightOn = false; }
En passen wij onze loop van de tijd van de slaap op basis van of het lampje of niet brandt. Dit zal batterij besparen door langer te slapen tijdens perioden van duisternis. Dus, na
int nSleepTime = 15000; // 15 seconds standard sleep time
we toevoegen
f (bLightOn) { nSleepTime = min(nSleepTime,(OPEN_WARNING_INTERVAL_SEC * 1000)); }
Nu als wij geconstateerd licht voor 60 + seconden hoort we een waarschuwing pieptoon over elke 15 seconden.
In het geval dat u problemen hebt met de codewijzigingen, heb ik de huidige schets bijgevoegd.