Elektroniska TattleTale / kylskåp Monitor (10 / 13 steg)
Steg 10: Spårning kylskåp öppen tid
Nu när vi har ett sätt att hålla koll på tiden, måste vi hålla reda på när kylskåpsdörren är öppen (aka när vi känner av ljus). För det första bör vi lägga några konstanter nära toppen av vår skiss för vår varning parametrar:
Konstanter för varning trösklar och återkommande intervall
CONST uint32_t OPEN_WARNING_TIME_SEC = 60.
CONST uint32_t OPEN_WARNING_INTERVAL_SEC = 15.
Vi måste också lägga till några globala variabler för att spåra ljus staten. Lägg till dessa ovanstående setup():
Globala variabler för varning spårning
booleska bLightOn = false;
uint32_t nLightOnStart = 0;
uint32_t nLastLightOnWarning = 0;
Och vi kan uppdatera vår loop() genom att ersätta
Kontrollera ljusförhållanden, om ljus...
om (lightCheck() == "Ljus")
{
warningTone (OPEN_WARNING_TONE, OPEN_WARNING_DURATION_MS, 1);
}
Produktion approxRunTime() för testning
Serial.Print (approxRunTime());
Serial.println ("ms");
med
Kontrollera ljusförhållanden, om ljus...
om (lightCheck() == "Ljus")
{
... om det inte var lätt förra gången genom öglan...
om (! bLightOn)
{
... ställa ljus på flaggan och återställa ljus på länge.
bLightOn = sant;
nLightOnStart = approxRunTime();
}
annat
{
Om det var ljus innan och ljus har varit på längre än vår varning tröskel...
om ((approxRunTime() - nLightOnStart) > = (OPEN_WARNING_TIME_SEC * 1000))
{
... och om våra sista ljuset på varning var längre sedan än våra intervall...
om ((approxRunTime() - nLastLightOnWarning) > = (OPEN_WARNING_INTERVAL_SEC * 1000))
{
... sedan återställa vår sista varning tid...
nLastLightOnWarning = approxRunTime();
... och spela varningssignal.
warningTone (OPEN_WARNING_TONE, OPEN_WARNING_DURATION_MS, 1);
}
}
}
}
annat
{
Om inte ljuset, se till ljus på flaggan är falskt.
bLightOn = false;
}
Och vi kan justera våra loop sömntid baserat på om ljuset är på eller inte. Detta kommer att spara batteri genom att sova längre under perioder av mörker. Så, efter
int nSleepTime = 15000; 15 sekunder standard sömntid
Vi lägger till
f (bLightOn)
{
nSleepTime = min (nSleepTime,(OPEN_WARNING_INTERVAL_SEC * 1000));
}
Nu om vi har upptäckt ljus för 60 + sekunder hör vi en varning beep om var 15 sekund.
Om du har några problem med koden förändringar, har jag bifogat den nuvarande skissen.