/**
******************************************************************************
* @file : 01_DbncdMPBttn_1b.ino
* @brief : Example for the ButtonToSwitch_ESP32 library DbncdMPBttn class
*
* Framework: Arduino
* Platform: ESP32
*
* The example instantiates a DbncdMPBttn object using:
* - 1 push button between GND and dmpbSwitchPin
* - 1 led with it's corresponding resistor between GND and dmpbLoadPin
* - 1 led with it's corresponding resistor between GND and dmpbIsDisabledPin
*
* ### This example doesn't create extra Tasks (by using the default `loopTask` Task):
* ### This example creates a software timer
*
* This simple example instantiates the DbncdMPBttn object in the setup(),
* and uses the default `loop ()`, in it and checks it's attribute flags
* locally through the getters methods.
*
* When a change in the object's outputs attribute flags values is detected, it
* manages the loads and resources that the switch turns On and Off, in this
* example case are the output of some GPIO pins.
*
* A software timer is created so that it periodically toggles the isEnabled attribute flag
* value, showing the behavior of the instantiated object when enabled and when disabled.
*
* @author : Gabriel D. Goldman
*
* @date : First release: 01/08/2023
* Last update: 20/01/2025 17:15 (GMT+0300 DST)
*
******************************************************************************
* @attention This file is part of the examples folder for the ButtonToSwitch_ESP32
* library. All files needed are provided as part of the source code for the library.
*
* Released into the public domain in accordance with "GPL-3.0-or-later" license terms.
*
******************************************************************************
*/
#include <Arduino.h>
#include <ButtonToSwitch_ESP32.h>
//===============================>> User Functions Prototypes BEGIN
void swpEnableCb(TimerHandle_t pvParam);
void Error_Handler();
//===============================>> User Functions Prototypes END
const uint8_t dmpbSwitchPin{GPIO_NUM_25};
const uint8_t dmpbLoadPin{GPIO_NUM_21};
const uint8_t dmpbIsDisabledPin{GPIO_NUM_18};
TimerHandle_t enableSwpTmrHndl{NULL};
BaseType_t tmrModRslt;
DbncdMPBttn dmpbBttn (dmpbSwitchPin);
DbncdMPBttn* dmpbBttnPtr {&dmpbBttn};
void setup() {
pinMode(dmpbLoadPin, OUTPUT);
pinMode(dmpbIsDisabledPin, OUTPUT);
enableSwpTmrHndl = xTimerCreate(
"isEnabledSwapTimer",
5000,
pdTRUE,
dmpbBttnPtr,
swpEnableCb
);
dmpbBttn.setIsOnDisabled(false);
dmpbBttn.begin();
if (enableSwpTmrHndl != NULL){
tmrModRslt = xTimerStart(enableSwpTmrHndl, portMAX_DELAY);
}
if(tmrModRslt == pdFAIL){
Error_Handler();
}
}
void loop() {
if(dmpbBttn.getOutputsChange()){
digitalWrite(dmpbLoadPin, (dmpbBttn.getIsOn())?HIGH:LOW);
digitalWrite(dmpbIsDisabledPin, (dmpbBttn.getIsEnabled())?LOW:HIGH);
dmpbBttn.setOutputsChange(false);
}
}
//===============================>> User Timers Implementations BEGIN
/**
* @brief Timer callback function
*
* @param pvParam The callback function argument.
* In this case is a pointer to the MPB object to be enabled and disabled periodically.
* It's a DbncdMPBttn* as enable() and disable() are dynamic polymorphic so they can be invoked through a base class pointer call.
*/
void swpEnableCb(TimerHandle_t pvParam){
DbncdMPBttn* dbncdMPBLocPtr = (DbncdMPBttn*) pvTimerGetTimerID(pvParam);
if (dbncdMPBLocPtr->getIsEnabled())
dbncdMPBLocPtr->disable();
else
dbncdMPBLocPtr->enable();
return;
}
//===============================>> User Timers Implementations END
//===============================>> User Functions Implementations BEGIN
/**
* @brief Error Handling function
*
*/
void Error_Handler(){
for(;;)
{
}
return;
}
//===============================>> User Functions Implementations END
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
led1:A
led1:C
r1:1
r1:2
led2:A
led2:C
r2:1
r2:2