12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #if defined(ARDUINO) && ARDUINO >= 100
- #include "Arduino.h"
- #else
- #include "WProgram.h"
- #endif
- #include "Metro.h"
- Metro::Metro(unsigned long interval_millis)
- {
- this->autoreset = 0;
- interval(interval_millis);
- reset();
- }
- // New creator so I can use either the original check behavior or benjamin.soelberg's
- // suggested one (see below).
- // autoreset = 0 is benjamin.soelberg's check behavior
- // autoreset != 0 is the original behavior
- Metro::Metro(unsigned long interval_millis, uint8_t autoreset)
- {
- this->autoreset = autoreset; // Fix by Paul Bouchier
- interval(interval_millis);
- reset();
- }
- void Metro::interval(unsigned long interval_millis)
- {
- this->interval_millis = interval_millis;
- }
- // Benjamin.soelberg's check behavior:
- // When a check is true, add the interval to the internal counter.
- // This should guarantee a better overall stability.
- // Original check behavior:
- // When a check is true, add the interval to the current millis() counter.
- // This method can add a certain offset over time.
- char Metro::check()
- {
- if (millis() - this->previous_millis >= this->interval_millis) {
- // As suggested by benjamin.soelberg@gmail.com, the following line
- // this->previous_millis = millis();
- // was changed to
- // this->previous_millis += this->interval_millis;
-
- // If the interval is set to 0 we revert to the original behavior
- if (this->interval_millis <= 0 || this->autoreset ) {
- this->previous_millis = millis();
- } else {
- this->previous_millis += this->interval_millis;
- }
-
- return 1;
- }
-
-
-
- return 0;
- }
- void Metro::reset()
- {
-
- this->previous_millis = millis();
- }
|