-
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathStopWatch.cpp
More file actions
148 lines (114 loc) · 2.43 KB
/
Copy pathStopWatch.cpp
File metadata and controls
148 lines (114 loc) · 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//
// FILE: StopWatch.cpp
// AUTHOR: Rob Tillaart
// VERSION: 0.4.1
// 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 micros() and therefore
// has the same restrictions as millis() has with respect to overflow.
#include "StopWatch.h"
StopWatch::StopWatch(const enum Resolution resolution)
{
reset();
setResolution(resolution);
}
void StopWatch::start()
{
if ((_state == StopWatch::RESET) || (_state == StopWatch::STOPPED))
{
_state = StopWatch::RUNNING;
uint32_t t = _gettime();
_startTime += t - _stopTime;
_stopTime = t;
}
}
void StopWatch::stop()
{
if (_state == StopWatch::RUNNING)
{
_stopTime = _gettime();
_state = StopWatch::STOPPED;
}
}
void StopWatch::reset()
{
_state = StopWatch::RESET;
_startTime = _stopTime = 0;
}
void StopWatch::restart()
{
_state = StopWatch::RUNNING;
uint32_t t = _gettime();
_startTime = _stopTime = t;
}
// made const as printTo expect a const object.
uint32_t StopWatch::elapsed() const
{
if (_state == StopWatch::RUNNING)
{
return _gettime() - _startTime;
}
return _stopTime - _startTime;
}
char StopWatch::getUnits()
{
return _resolution;
}
bool StopWatch::isRunning()
{
return _state == StopWatch::RUNNING;
}
bool StopWatch::isStopped()
{
return _state == StopWatch::STOPPED;
}
bool StopWatch::isReset()
{
return _state == StopWatch::RESET;
}
void StopWatch::setResolution(const enum Resolution resolution)
{
reset();
_resolution = resolution;
switch(_resolution)
{
case MICROS:
_gettime = this->_micros;
break;
case SECONDS:
_gettime = this->seconds;
break;
case MINUTES:
_gettime = this->minutes;
break;
case MILLIS:
default:
_gettime = this->_millis;
_resolution = MILLIS; // for default!
break;
}
}
////////////////////////////////////////////////
//
// PRINTABLE
//
size_t StopWatch::printTo(Print& p) const
{
uint32_t ti = StopWatch::elapsed();
size_t n = p.print(ti);
switch(_resolution)
{
case MICROS: n += p.print(" us"); break;
case MILLIS: n += p.print(" ms"); break;
case SECONDS: n += p.print(" s"); break;
case MINUTES: n += p.print(" m."); break;
}
return n;
}
////////////////////////////////////////////////
//
// PRIVATE
//
// -- END OF FILE --