st-anything/lib/ST_Anything_Adafruit_MPR121/PS_Adafruit_MPR121.h
Gašper Dobrovoljc ec125f27db
IP Configuration
2023-03-11 15:11:03 +01:00

97 lines
3.4 KiB
C++

//******************************************************************************************
// File: PS_Adafruit_MPR121.h
// Authors: Luca Masera
//
// Summary: PS_Adafruit_MPR121 is a class which implements the SmartThings
// "Contact Sensor" device capability.
// It inherits from the st::InterruptSensor class.
//
// Create an instance of this class in your sketch's
// global variable section For Example:
// st::PS_Adafruit_MPR121 sensor(F("touchButtons"), 5);
//
// st::PS_Adafruit_MPR121() constructor requires the following arguments
// - String &name - REQUIRED - the name of the object, should be "touchButtons_Kitchen", "touchButtons_Desk", etc...
// - int8_t activatedButtonId - REQUIRED - the id of the sensor that is used to activate the touching capability
// - uint8_t sensibility5C = 0x10, together with sensibility5D sets the sensibility of the touch sensors
// - uint8_t sensibility5D = 0x20,
// - long reqNumMillisHeld = 1000 - milliseconds thesholdb between "Held" and "Pushed"
// -
//(default = 1000)
//
// Change History:
//
// Date Who What
// ---- --- ----
// 2022-09-22 Luca Masera Original Creation
//
//******************************************************************************************
#ifndef ST_PS_ADAFRUIT_MPR121_H
#define ST_PS_ADAFRUIT_MPR121_H
#include <Adafruit_MPR121.h>
#include "InterruptSensor.h"
namespace st {
class PS_Adafruit_MPR121 : public InterruptSensor {
private:
unsigned long m_lTimeBtnPressed; // time when the digital input went high
unsigned long m_lreqNumMillisHeld; // amount of time required to trigger "held" instead of "pushed"
uint8_t m_sensibility5C; // couple of values used to set the default sensitivity of the sensors
uint8_t m_sensibility5D;
bool m_bFirstRun = true; // used to prevent sending inadvertent button
// pushed/held message on startup
bool m_bHeldSent = false; // used to prevent sending multiple 'held' messages
bool isBlockedStatus = false; // ued to inform if the sensor is blocked and needs a reset
const __FlashStringHelper *_PUSHED = F(" pushed");
const __FlashStringHelper *_HELD = F(" held");
const __FlashStringHelper *_RELEASED = F(" released");
u_int16_t _ACTIVATION_THRESOLD = 1000;
u_int16_t _ACTIVE_TIMEOUT = 2000;
u_int16_t HOLD_THRESOLD = 800;
boolean isActive = false;
int8_t activateButtonId;
uint16_t curr_touched, old_touched, isTouched, isHold;
long currentTime, activationStart, waitingActive, startTouch[12];
Adafruit_MPR121 cap = Adafruit_MPR121();
public:
// constructor - called in your sketch's global variable declaration section
PS_Adafruit_MPR121(const __FlashStringHelper *name,
int8_t activateButtonId,
uint8_t sensibility5C = 0x10, // defaults to low sensibility for almost touch
uint8_t sensibility5D = 0x20,
long reqNumMillisHeld = 1000); //defaults to 1 second
// destructor
virtual ~PS_Adafruit_MPR121();
// initialization function
virtual void init();
// called periodically by Everything class to ensure ST Cloud is kept up to
// date. Not used for IS_Button.
virtual void refresh();
// handles what to do when interrupt is triggered
virtual void runInterrupt();
// handles what to do when interrupt is ended
virtual void runInterruptEnded();
// override update method
virtual void update();
};
} // namespace st
#endif