2021-01-29 06:31:58 -05:00
|
|
|
//
|
|
|
|
// FILE: StopWatch.cpp
|
|
|
|
// AUTHOR: Rob Tillaart
|
2022-11-25 14:09:48 -05:00
|
|
|
// VERSION: 0.3.3
|
2021-01-29 06:31:58 -05:00
|
|
|
// DATE: 2011-01-04
|
|
|
|
// PURPOSE: Arduino Library implementing a stopwatch including seconds, milliseconds microseconds
|
|
|
|
// URL: https://github.com/RobTillaart/StopWatch_RT
|
|
|
|
//
|
|
|
|
// The library is based upon millis() and therefore
|
2021-12-28 11:04:43 -05:00
|
|
|
// has the same restrictions as millis() has with respect to overflow.
|
2022-11-25 14:09:48 -05:00
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
|
|
|
|
|
|
|
|
#include "StopWatch.h"
|
|
|
|
|
|
|
|
|
2021-12-28 11:04:43 -05:00
|
|
|
StopWatch::StopWatch(const enum Resolution resolution)
|
2021-01-29 06:31:58 -05:00
|
|
|
{
|
2021-12-28 11:04:43 -05:00
|
|
|
setResolution(resolution);
|
2021-01-29 06:31:58 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-11-25 14:09:48 -05:00
|
|
|
void StopWatch::start()
|
2021-01-29 06:31:58 -05:00
|
|
|
{
|
2022-11-25 14:09:48 -05:00
|
|
|
if ((_state == StopWatch::RESET) || (_state == StopWatch::STOPPED))
|
2021-01-29 06:31:58 -05:00
|
|
|
{
|
2022-11-25 14:09:48 -05:00
|
|
|
_state = StopWatch::RUNNING;
|
|
|
|
uint32_t t = _gettime();
|
|
|
|
_starttime += t - _stoptime;
|
|
|
|
_stoptime = t;
|
|
|
|
}
|
|
|
|
}
|
2021-01-29 06:31:58 -05:00
|
|
|
|
|
|
|
|
2022-11-25 14:09:48 -05:00
|
|
|
void StopWatch::stop()
|
|
|
|
{
|
|
|
|
if (_state == StopWatch::RUNNING)
|
|
|
|
{
|
|
|
|
_stoptime = _gettime();
|
|
|
|
_state = StopWatch::STOPPED;
|
2021-01-29 06:31:58 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void StopWatch::reset()
|
|
|
|
{
|
2021-12-28 11:04:43 -05:00
|
|
|
_state = StopWatch::RESET;
|
|
|
|
_starttime = _stoptime = 0;
|
2021-01-29 06:31:58 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-11-25 14:09:48 -05:00
|
|
|
// made const as printTo expect a const object.
|
2021-01-29 06:31:58 -05:00
|
|
|
uint32_t StopWatch::elapsed() const
|
|
|
|
{
|
|
|
|
if (_state == StopWatch::RUNNING)
|
|
|
|
{
|
|
|
|
return _gettime() - _starttime;
|
|
|
|
}
|
|
|
|
return _stoptime - _starttime;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-11-25 14:09:48 -05:00
|
|
|
bool StopWatch::isRunning()
|
|
|
|
{
|
|
|
|
return _state == StopWatch::RUNNING;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
void StopWatch::setResolution(const enum Resolution resolution)
|
2021-01-29 06:31:58 -05:00
|
|
|
{
|
2022-11-25 14:09:48 -05:00
|
|
|
reset();
|
|
|
|
_resolution = resolution;
|
|
|
|
switch(_resolution)
|
2021-01-29 06:31:58 -05:00
|
|
|
{
|
2022-11-25 14:09:48 -05:00
|
|
|
case MICROS:
|
|
|
|
_gettime = _micros;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case SECONDS:
|
|
|
|
_gettime = seconds;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case MINUTES:
|
|
|
|
_gettime = minutes;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case MILLIS:
|
|
|
|
default:
|
|
|
|
_gettime = _millis;
|
|
|
|
_resolution = MILLIS; // for default!
|
|
|
|
break;
|
2021-01-29 06:31:58 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-11-25 14:09:48 -05:00
|
|
|
|
|
|
|
////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// PRINTABLE
|
|
|
|
//
|
2021-01-29 06:31:58 -05:00
|
|
|
size_t StopWatch::printTo(Print& p) const
|
|
|
|
{
|
|
|
|
uint32_t ti = StopWatch::elapsed();
|
|
|
|
size_t n = p.print(ti);
|
2021-12-28 11:04:43 -05:00
|
|
|
switch(_resolution)
|
2021-01-29 06:31:58 -05:00
|
|
|
{
|
|
|
|
case MICROS: n += p.print(" us"); break;
|
|
|
|
case SECONDS: n += p.print(" s"); break;
|
|
|
|
case MINUTES: n += p.print(" m."); break;
|
|
|
|
case MILLIS: n += p.print(" ms"); break;
|
|
|
|
}
|
|
|
|
return n;
|
|
|
|
}
|
|
|
|
|
2021-12-28 11:04:43 -05:00
|
|
|
|
2022-11-25 14:09:48 -05:00
|
|
|
////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// PRIVATE
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
// -- END OF FILE --
|
2021-12-28 11:04:43 -05:00
|
|
|
|