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

Committer:
Bobty
Date:
Mon Feb 02 16:24:30 2015 +0000
Revision:
4:0d3a207680b0
Parent:
2:6bfef0839102
Child:
5:5bccf48799d4
Starting to add SD File System

Who changed what in which revision?

UserRevisionLine numberNew 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 4:0d3a207680b0 6 PulsePin::PulsePin(DigitalIn& pin, bool detectRisingEdge, int waitForPinStabilisationMs) :
Bobty 2:6bfef0839102 7 _pin(pin)
Bobty 2:6bfef0839102 8 {
Bobty 4:0d3a207680b0 9 _detectRisingEdge = detectRisingEdge;
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 4:0d3a207680b0 34 if (pinState != _detectRisingEdge)
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 }