Skip to content

Commit 51e85e6

Browse files
committed
Reset the last pulse time when needed.
Inspired by r-downing#18
1 parent 8e40446 commit 51e85e6

2 files changed

Lines changed: 14 additions & 2 deletions

File tree

AutoPID.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,18 @@ void AutoPID::setIntegral(double integral) { _integral = integral; }
8888

8989
void AutoPIDRelay::run() {
9090
AutoPID::run();
91+
if (!_hasRun) {
92+
_lastPulseTime = millis();
93+
_hasRun = true;
94+
}
9195
while ((millis() - _lastPulseTime) > _pulseWidth)
9296
_lastPulseTime += _pulseWidth;
9397
*_relayState = ((millis() - _lastPulseTime) < (_pulseValue * _pulseWidth));
9498
}
9599

96100
double AutoPIDRelay::getPulseValue() { return (isStopped() ? 0 : _pulseValue); }
101+
102+
void AutoPIDRelay::reset() {
103+
AutoPID::reset();
104+
_lastPulseTime = millis();
105+
}

AutoPID.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class AutoPID {
2626
void run();
2727
// Stops PID functionality, output sets to
2828
void stop();
29-
void reset();
29+
virtual void reset();
3030
bool isStopped();
3131

3232
double getIntegral();
@@ -56,9 +56,12 @@ class AutoPIDRelay : public AutoPID {
5656

5757
double getPulseValue();
5858

59+
void reset() override;
60+
5961
private:
6062
bool *_relayState;
61-
unsigned long _pulseWidth, _lastPulseTime;
63+
unsigned long _pulseWidth;
64+
unsigned long _lastPulseTime;
6265
double _pulseValue;
6366
}; // class AutoPIDRelay
6467

0 commit comments

Comments
 (0)