78 lines
2.7 KiB
C++
78 lines
2.7 KiB
C++
//******************************************************************************************
|
|
// File: InterruptSensor.h
|
|
// Authors: Dan G Ogorchock & Daniel J Ogorchock (Father and Son)
|
|
//
|
|
// Summary: st::InterruptSensor is a generic class which inherits from st::Sensor. This is the
|
|
// parent class for the st::IS_Motion, IS_Contact, and IS_DoorControl classes.
|
|
// In general, this file should not need to be modified.
|
|
//
|
|
// Change History:
|
|
//
|
|
// Date Who What
|
|
// ---- --- ----
|
|
// 2015-01-03 Dan & Daniel Original Creation
|
|
// 2015-03-17 Dan Added optional "numReqCounts" constructor argument/capability
|
|
// 2019-09-22 Dan Ogorchock ESP8266 support for using A0 pin as a digital input
|
|
//
|
|
//
|
|
//******************************************************************************************
|
|
|
|
#ifndef ST_INTERRUPTSENSOR_H
|
|
#define ST_INTERRUPTSENSOR_H
|
|
|
|
#include "Sensor.h"
|
|
|
|
namespace st
|
|
{
|
|
class InterruptSensor: public Sensor
|
|
{
|
|
private:
|
|
byte m_nInterruptPin; //pin that will be monitored for change of state
|
|
bool m_bInterruptState; //LOW or HIGH - determines which value indicates the interrupt is true (i.e. LOW=Falling Edge, HIGH=Rising Edge)
|
|
bool m_bStatus; //true == interrupted
|
|
bool m_bPullup; //true == Internal Pullup resistor required, set in constructor call in your sketch
|
|
bool m_bInitRequired; //
|
|
long m_nRequiredCounts; //Number of required counts (checks of the pin) before believing the pin is high/low
|
|
long m_nCurrentUpCount;
|
|
long m_nCurrentDownCount;
|
|
long m_nLoopCounter;
|
|
|
|
void checkIfTriggered();
|
|
|
|
public:
|
|
//constructor
|
|
InterruptSensor(const __FlashStringHelper *name, byte pin, bool iState, bool internalPullup=false, long numReqCounts=0); //(defaults to NOT using internal pullup resistors, and required counts = 0)
|
|
|
|
//destructor
|
|
virtual ~InterruptSensor();
|
|
|
|
//initialization function
|
|
virtual void init();
|
|
|
|
//update function
|
|
virtual void update();
|
|
|
|
//handles what to do when interrupt is triggered - all derived classes should implement this virtual function
|
|
virtual void runInterrupt();
|
|
|
|
//handles what to do when interrupt is ended - all derived classes should implement this virtual function
|
|
virtual void runInterruptEnded();
|
|
|
|
//gets
|
|
inline byte getInterruptPin() const {return m_nInterruptPin;}
|
|
inline bool getInterruptState() const {return m_bInterruptState;}
|
|
inline bool getStatus() const {return m_bStatus;} //whether or not the device is currently interrupted
|
|
|
|
|
|
//sets
|
|
void setInterruptPin(byte pin);
|
|
void setInterruptState(bool b) {m_bInterruptState=b;}
|
|
|
|
//debug flag to determine if debug print statements are executed (set value in your sketch)
|
|
static bool debug;
|
|
|
|
};
|
|
}
|
|
|
|
|
|
#endif |