9 #ifndef NO_BUTTONSCOMMANDER 10 #ifndef NO_BUTTONSCOMMANDERSWITCH 14 this->debounceDelay = 50;
15 this->lastSelectedPin = DP_INVALID;
20 if (inpIdPin->
Pin != DP_INVALID)
22 pinMode2f(inpIdPin->
Pin, INPUT_PULLUP);
28 #ifdef COMMANDERS_DEBUG_MODE 29 if (this->EventPins.
pFirst == NULL)
30 Serial.println(F(
"This switch button have no ID defined : begin() must be called AFTER AddEvent !"));
36 beginItem(pCurr->
Obj);
50 if (inPin == pCurr->
Obj->
Pin)
56 return pCurr->
Obj->
Id;
68 pIdpin->
Pin = Arduino_to_GPIO_pin(inPin);
70 pIdpin->
Event = inEvent;
71 pIdpin->
Data = inData;
74 this->EventPins.
AddItem(pIdpin);
81 if (inPin != DP_INVALID)
84 int pinState = digitalRead2f(inPin);
91 if (pinState != *inpCurrentPinState)
94 #ifdef COMMANDERS_DEBUG_MODE 95 #ifdef COMMANDERS_DEBUG_VERBOSE_MODE 96 Serial.print(F(
"Pin "));
97 Serial.print(GPIO_to_Arduino_pin(inPin));
98 Serial.print(pinState == HIGH ? F(
" high") : F(
" low"));
99 Serial.println(F(
" debounced !"));
102 *inpLastDebounceTime = millis();
103 *inpCurrentPinState = pinState;
107 if (*inpLastDebounceTime > 0 && (millis() - *inpLastDebounceTime) > inDebounceDelay)
109 *inpLastDebounceTime = 0;
110 if (*inpCurrentPinState == pinState)
114 *inpCurrentPinState = pinState;
124 while (pCurr != NULL)
126 if (pCurr->
Obj->
Pin != DP_INVALID)
129 int pinState = digitalRead2f(pCurr->
Obj->
Pin);
133 this->lastSelectedPin = pCurr->
Obj->
Pin;
138 pCurr = pCurr->
pNext;
144 if (this->EventPins.
pFirst == NULL)
146 #ifdef COMMANDERS_DEBUG_MODE 147 if (this->debounceDelay != UINT32_MAX)
149 Serial.println(F(
"This switch button have no ID defined : call AddEvent() and begin() !"));
151 this->debounceDelay = UINT32_MAX;
164 this->lastSelectedPin = pCurr->
Pin;
172 #ifdef COMMANDERS_PRINT_COMMANDERS 173 void ButtonsCommanderSwitch::printCommander()
175 Serial.println(F(
" Switch"));
178 while (pCurr != NULL)
180 Serial.print(F(
" Event - Pin: "));
181 Serial.print(GPIO_to_Arduino_pin(pCurr->
Obj->
Pin));
182 Serial.print(F(
" / Id: "));
183 Serial.print(pCurr->
Obj->
Id);
184 Serial.print(F(
" / Event type: "));
187 Serial.print(F(
" / Debounce delay: "));
188 Serial.print(this->debounceDelay);
189 Serial.println(F(
""));
191 pCurr = pCurr->
pNext;
static void printEventType(COMMANDERS_EVENT_TYPE inEventType, bool inDataFollow)
CMDRSCHAINEDLISTITEM< T > * pCurrentItem
static unsigned long RaiseEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEvent = COMMANDERS_EVENT_MOVEPOSITIONID, int inData = 0)
COMMANDERS_EVENT_TYPE Event
CMDRSCHAINEDLISTITEM * pNext
unsigned long LastDebounceTime
CMDRSCHAINEDLISTITEM< T > * pFirst
static void printEventData(COMMANDERS_EVENT_TYPE inEventType, int inEventData)