Added position() method to SpanToggle()
Created PushButton::OPEN and PushButton::CLOSED enums. This completes all SpanToggle() functionality. Will add a SpanToggle() to UnitTest.
This commit is contained in:
parent
c3d0c98e04
commit
e2678f5661
|
|
@ -2032,7 +2032,11 @@ SpanRange::SpanRange(int min, int max, int step){
|
|||
SpanButton::SpanButton(int pin, uint16_t longTime, uint16_t singleTime, uint16_t doubleTime, triggerType_t triggerType) : PushButton(pin, triggerType){
|
||||
|
||||
if(homeSpan.Accessories.empty() || homeSpan.Accessories.back()->Services.empty()){
|
||||
Serial.printf("\nFATAL ERROR! Can't create new SpanButton(%d,%u,%u,%u) without a defined Service ***\n",pin,longTime,singleTime,doubleTime);
|
||||
if(buttonType==BUTTON)
|
||||
Serial.printf("\nFATAL ERROR! Can't create new SpanButton(%d,%u,%u,%u) without a defined Service ***\n",pin,longTime,singleTime,doubleTime);
|
||||
else
|
||||
Serial.printf("\nFATAL ERROR! Can't create new SpanToggle(%d,%u) without a defined Service ***\n",pin,longTime);
|
||||
|
||||
Serial.printf("\n=== PROGRAM HALTED ===");
|
||||
while(1);
|
||||
}
|
||||
|
|
@ -2049,8 +2053,9 @@ SpanButton::SpanButton(int pin, uint16_t longTime, uint16_t singleTime, uint16_t
|
|||
|
||||
void SpanButton::check(){
|
||||
|
||||
if(triggered(singleTime,longTime,doubleTime)) // if the underlying PushButton is triggered
|
||||
service->button(pin,type()); // call the Service's button() routine with pin and type as parameters
|
||||
if( (buttonType==BUTTON && triggered(singleTime,longTime,doubleTime)) ||
|
||||
(buttonType==TOGGLE && toggled(longTime)) ) // if the underlying PushButton is triggered/toggled
|
||||
service->button(pin,type()); // call the Service's button() routine with pin and type as parameters
|
||||
}
|
||||
|
||||
///////////////////////////////
|
||||
|
|
|
|||
|
|
@ -817,14 +817,6 @@ class SpanButton : public PushButton {
|
|||
|
||||
public:
|
||||
|
||||
enum {
|
||||
SINGLE=0,
|
||||
DOUBLE=1,
|
||||
LONG=2,
|
||||
ON=3,
|
||||
OFF=4
|
||||
};
|
||||
|
||||
static constexpr triggerType_t TRIGGER_ON_LOW=PushButton::TRIGGER_ON_LOW;
|
||||
static constexpr triggerType_t TRIGGER_ON_HIGH=PushButton::TRIGGER_ON_HIGH;
|
||||
|
||||
|
|
@ -846,6 +838,7 @@ class SpanToggle : SpanButton {
|
|||
public:
|
||||
|
||||
SpanToggle(int pin, triggerType_t triggerType=TRIGGER_ON_LOW, uint16_t toggleTime=5) : SpanButton(pin,triggerType,toggleTime){buttonType=TOGGLE;};
|
||||
int position(){return(pressType);}
|
||||
};
|
||||
|
||||
///////////////////////////////
|
||||
|
|
|
|||
|
|
@ -113,10 +113,10 @@ PushButton::PushButton(int pin, triggerType_t triggerType){
|
|||
#endif
|
||||
|
||||
if(triggerType(pin)){
|
||||
pressType=ON;
|
||||
pressType=CLOSED;
|
||||
toggleStatus=2;
|
||||
} else {
|
||||
pressType=OFF;
|
||||
pressType=OPEN;
|
||||
toggleStatus=0;
|
||||
}
|
||||
|
||||
|
|
@ -208,28 +208,28 @@ boolean PushButton::toggled(uint16_t toggleTime){
|
|||
switch(toggleStatus){
|
||||
|
||||
case 0:
|
||||
if(triggerType(pin)){ // switch is toggled "on"
|
||||
if(triggerType(pin)){ // switch is toggled CLOSED
|
||||
singleAlarm=cTime+toggleTime;
|
||||
toggleStatus=1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if(!triggerType(pin)){ // switch is toggled "off" too soon
|
||||
if(!triggerType(pin)){ // switch is toggled back OPEN too soon
|
||||
toggleStatus=0;
|
||||
}
|
||||
|
||||
else if(cTime>singleAlarm){ // switch has been in "on" state for sufficient time
|
||||
else if(cTime>singleAlarm){ // switch has been in CLOSED state for sufficient time
|
||||
toggleStatus=2;
|
||||
pressType=ON;
|
||||
pressType=CLOSED;
|
||||
return(true);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if(!triggerType(pin)){ // switch is toggled "off" after being in "on" state
|
||||
if(!triggerType(pin)){ // switch is toggled OPEN after being in CLOSED state
|
||||
toggleStatus=0;
|
||||
pressType=OFF;
|
||||
pressType=OPEN;
|
||||
return(true);
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -85,13 +85,13 @@ class PushButton{
|
|||
uint32_t singleAlarm;
|
||||
uint32_t doubleAlarm;
|
||||
uint32_t longAlarm;
|
||||
int pressType;
|
||||
|
||||
static touch_value_t threshold;
|
||||
static const int calibCount=20;
|
||||
|
||||
protected:
|
||||
|
||||
int pressType;
|
||||
typedef boolean (*triggerType_t)(int pin);
|
||||
|
||||
int pin;
|
||||
|
|
@ -103,8 +103,8 @@ class PushButton{
|
|||
SINGLE=0, // applicable only for push button
|
||||
DOUBLE=1, // applicable only for push button
|
||||
LONG=2, // applicable only for push button
|
||||
ON=3, // applicable only for toggle switch
|
||||
OFF=4 // applicable only for toggle switch
|
||||
CLOSED=3, // applicable only for toggle switch
|
||||
OPEN=4 // applicable only for toggle switch
|
||||
};
|
||||
|
||||
static boolean TRIGGER_ON_LOW(int pin){return(!digitalRead(pin));}
|
||||
|
|
|
|||
Loading…
Reference in New Issue