Monitor for central heating system (e.g. 2zones+hw) Supports up to 15 temp probes (DS18B20/DS18S20) 3 valve monitors Gas pulse meter recording Use stand-alone or with nodeEnergyServer See http://robdobson.com/2015/09/central-heating-monitor
Dependencies: EthernetInterfacePlusHostname NTPClient Onewire RdWebServer SDFileSystem-RTOS mbed-rtos mbed-src
PulsePin.cpp@2:6bfef0839102, 2014-11-07 (annotated)
- Committer:
- Bobty
- Date:
- Fri Nov 07 16:09:15 2014 +0000
- Revision:
- 2:6bfef0839102
- Child:
- 4:0d3a207680b0
Working - detects between pulse time and counts total pulses
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Bobty | 2:6bfef0839102 | 1 | // Handles a pin that has a slow pulse applied |
Bobty | 2:6bfef0839102 | 2 | // Written for a gas meter monitor |
Bobty | 2:6bfef0839102 | 3 | |
Bobty | 2:6bfef0839102 | 4 | #include "PulsePin.h" |
Bobty | 2:6bfef0839102 | 5 | |
Bobty | 2:6bfef0839102 | 6 | PulsePin::PulsePin(DigitalIn& pin, bool risingEdge, int waitForPinStabilisationMs) : |
Bobty | 2:6bfef0839102 | 7 | _pin(pin) |
Bobty | 2:6bfef0839102 | 8 | { |
Bobty | 2:6bfef0839102 | 9 | _risingEdge = risingEdge; |
Bobty | 2:6bfef0839102 | 10 | _waitForPinStabilisationMs = waitForPinStabilisationMs; |
Bobty | 2:6bfef0839102 | 11 | _pinTimer.start(); |
Bobty | 2:6bfef0839102 | 12 | _curPinState = _pin; |
Bobty | 2:6bfef0839102 | 13 | _lastStableTimeMs = _pinTimer.read_ms(); |
Bobty | 2:6bfef0839102 | 14 | _firstEdgeDetected = false; |
Bobty | 2:6bfef0839102 | 15 | _timeBetweenEdgesMs = 0; |
Bobty | 2:6bfef0839102 | 16 | } |
Bobty | 2:6bfef0839102 | 17 | |
Bobty | 2:6bfef0839102 | 18 | bool PulsePin::Service() |
Bobty | 2:6bfef0839102 | 19 | { |
Bobty | 2:6bfef0839102 | 20 | // Check time since last edge - looking for stability |
Bobty | 2:6bfef0839102 | 21 | int timeNowMs = _pinTimer.read_ms(); |
Bobty | 2:6bfef0839102 | 22 | if (timeNowMs < _lastStableTimeMs + _waitForPinStabilisationMs) |
Bobty | 2:6bfef0839102 | 23 | return false; |
Bobty | 2:6bfef0839102 | 24 | |
Bobty | 2:6bfef0839102 | 25 | // Check for a change of state |
Bobty | 2:6bfef0839102 | 26 | bool pinState = _pin; |
Bobty | 2:6bfef0839102 | 27 | if (pinState == _curPinState) |
Bobty | 2:6bfef0839102 | 28 | return false; |
Bobty | 2:6bfef0839102 | 29 | |
Bobty | 2:6bfef0839102 | 30 | _curPinState = pinState; |
Bobty | 2:6bfef0839102 | 31 | _lastStableTimeMs = timeNowMs; |
Bobty | 2:6bfef0839102 | 32 | |
Bobty | 2:6bfef0839102 | 33 | // Check if this is the direction of edge we're looking for |
Bobty | 2:6bfef0839102 | 34 | if (pinState != _risingEdge) |
Bobty | 2:6bfef0839102 | 35 | return false; |
Bobty | 2:6bfef0839102 | 36 | |
Bobty | 2:6bfef0839102 | 37 | // Reset the timer to avoid wrap around problems |
Bobty | 2:6bfef0839102 | 38 | bool firstEdgeDetected = _firstEdgeDetected; |
Bobty | 2:6bfef0839102 | 39 | _pinTimer.reset(); |
Bobty | 2:6bfef0839102 | 40 | _firstEdgeDetected = true; |
Bobty | 2:6bfef0839102 | 41 | _lastStableTimeMs = 0; |
Bobty | 2:6bfef0839102 | 42 | |
Bobty | 2:6bfef0839102 | 43 | // Check if this should be returned |
Bobty | 2:6bfef0839102 | 44 | if (!firstEdgeDetected) |
Bobty | 2:6bfef0839102 | 45 | return false; |
Bobty | 2:6bfef0839102 | 46 | _timeBetweenEdgesMs = timeNowMs; |
Bobty | 2:6bfef0839102 | 47 | return true; |
Bobty | 2:6bfef0839102 | 48 | } |
Bobty | 2:6bfef0839102 | 49 | |
Bobty | 2:6bfef0839102 | 50 | int PulsePin::GetLastCycleTimeMs() |
Bobty | 2:6bfef0839102 | 51 | { |
Bobty | 2:6bfef0839102 | 52 | return _timeBetweenEdgesMs; |
Bobty | 2:6bfef0839102 | 53 | } |