Analog-to-binary input with hysteresis
Dependents: Hysteresis LAB9_Hysteresis LAB18_StreetLight
HysteresisIn.cpp@0:fe43537bd3d6, 2013-12-20 (annotated)
- Committer:
- kayekss
- Date:
- Fri Dec 20 19:21:57 2013 +0000
- Revision:
- 0:fe43537bd3d6
First release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kayekss | 0:fe43537bd3d6 | 1 | // ==================================================== Dec 21 2013, kayeks == |
kayekss | 0:fe43537bd3d6 | 2 | // HysteresisIn.cpp |
kayekss | 0:fe43537bd3d6 | 3 | // =========================================================================== |
kayekss | 0:fe43537bd3d6 | 4 | // Analog to binary input class with hysteresis |
kayekss | 0:fe43537bd3d6 | 5 | // - For a simple Schmitt-Trigger substitute |
kayekss | 0:fe43537bd3d6 | 6 | |
kayekss | 0:fe43537bd3d6 | 7 | #include "HysteresisIn.h" |
kayekss | 0:fe43537bd3d6 | 8 | |
kayekss | 0:fe43537bd3d6 | 9 | /** Constructor of class HysteresisIn */ |
kayekss | 0:fe43537bd3d6 | 10 | HysteresisIn::HysteresisIn(PinName inputPin, float htl, float lth, |
kayekss | 0:fe43537bd3d6 | 11 | bool initialState) |
kayekss | 0:fe43537bd3d6 | 12 | : |
kayekss | 0:fe43537bd3d6 | 13 | in(inputPin) |
kayekss | 0:fe43537bd3d6 | 14 | { |
kayekss | 0:fe43537bd3d6 | 15 | this->state = initialState; |
kayekss | 0:fe43537bd3d6 | 16 | this->thresholdHighToLow = htl; |
kayekss | 0:fe43537bd3d6 | 17 | this->thresholdLowToHigh = lth; |
kayekss | 0:fe43537bd3d6 | 18 | } |
kayekss | 0:fe43537bd3d6 | 19 | |
kayekss | 0:fe43537bd3d6 | 20 | /** Destructor of class HysteresisIn */ |
kayekss | 0:fe43537bd3d6 | 21 | HysteresisIn::~HysteresisIn() { |
kayekss | 0:fe43537bd3d6 | 22 | } |
kayekss | 0:fe43537bd3d6 | 23 | |
kayekss | 0:fe43537bd3d6 | 24 | /* Read once and decide an output */ |
kayekss | 0:fe43537bd3d6 | 25 | bool HysteresisIn::read() { |
kayekss | 0:fe43537bd3d6 | 26 | float val = in; |
kayekss | 0:fe43537bd3d6 | 27 | if (this->state && val < this->thresholdHighToLow) { |
kayekss | 0:fe43537bd3d6 | 28 | this->state = 0; |
kayekss | 0:fe43537bd3d6 | 29 | } else if (!this->state && val > this->thresholdLowToHigh) { |
kayekss | 0:fe43537bd3d6 | 30 | this->state = 1; |
kayekss | 0:fe43537bd3d6 | 31 | } |
kayekss | 0:fe43537bd3d6 | 32 | return this->state; |
kayekss | 0:fe43537bd3d6 | 33 | } |
kayekss | 0:fe43537bd3d6 | 34 | |
kayekss | 0:fe43537bd3d6 | 35 | /* Forcibly set current state */ |
kayekss | 0:fe43537bd3d6 | 36 | void HysteresisIn::write(bool newState) { |
kayekss | 0:fe43537bd3d6 | 37 | this->state = newState; |
kayekss | 0:fe43537bd3d6 | 38 | } |