GY-63_MS5611/libraries/Stopwatch_RT/StopWatch.cpp

123 lines
2.1 KiB
C++
Raw Normal View History

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