Stap 9: Bijhouden van tijd
We moeten nu beginnen met het bijhouden hoe lang de Boon is in het licht staat. Omdat de timers op de Bean's Arduino circuit zijn uitgeschakeld tijdens Bean.sleep() moeten we enkele variabelen en functies voor tijdregistratie ingesteld. Boven de Setup functie door deze variabelen te maken:
// Global variables for time tracking uint32_t nLoopStart = 0; uint32_t nApproxRunTime = 0;
Vervolgens maakt u twee hulpfuncties voor tijdwaarneming:
uint32_t approxRunTime() { return (nApproxRunTime + (millis() - nLoopStart)); } void updateApproxRunTimeForSleep( uint32_t nSleepTime ) { nApproxRunTime += (millis() - nLoopStart) + nSleepTime; nLoopStart = millis(); // Reset nLoopStart since we have added // loop time to nApproxRunTime }
Voor het bijhouden van de tijd moeten we nLoopStart aan de bovenkant van de loop. We moeten ook nApproxRunTime aanpassen voor de tijd van de slaap aan de onderkant van de loop.
void loop() { // For time tracking we need to know when the loop() started nLoopStart = millis(); // 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" ); // Determine our loop sleep time based on conditions int nSleepTime = 15000; // 15 seconds standard sleep time // Before sleep, update approximate run time updateApproxRunTimeForSleep( nSleepTime ); // Sleep Bean.sleep(nSleepTime); }
Wanneer u compile/upload deze wijzigingen die de seriële Monitor uitgang moet er ongeveer uitzien zoals hieronder--ziet u onze geen kwijting tijd afgewisseld met onze geschatte totale bewerkingstijd. (Omdat we zijn klaar opzetten van het circuit van de lichtsensor ik zal commentaar uit de geen kwijting tijd output.) Opmerking: Zich bewust zijn dat dit tijd houden niet super nauwkeurige zullen; we zijn onderlinge aanpassing van de totale bewerkingstijd op basis van de tijd van de uitvoering van de lus en hoe lang we vertellen de boon te slapen, maar we zijn niet goed voor tijd de Boon duurt te zetten van de arduino te slapen of duurt het wakker de arduino. We zijn ook niet boekhouding voor de mogelijkheid van de arduino vroeg wordt gewekt door seriële input voor de Bean.
2 ms 1067ms 0 ms 17218ms 2 ms 33367ms 202 ms 49723ms