Files
arduino/src/Main/PushButton.cpp
2024-02-17 17:28:51 +07:00

75 lines
1.6 KiB
C++

#include "PushButton.h"
PushButton::PushButton(BoardType type) : _boardType(type) {}
#if defined(ESP8266)
void PushButton::begin(Stream &debugStream) {
this->_debugStream = &debugStream;
this->begin();
}
#else
#endif
/**
* @brief Initialize PushButton, If PushButton is not initialized the get state
*
*/
void PushButton::begin(void) {
if (this->_isBegin) {
AgLog("Initialized, call end() then try again");
return;
}
this->_bsp = getBoardDef(this->_boardType);
if ((this->_bsp == nullptr) || (this->_bsp->SW.supported == false)) {
AgLog("Board not supported or switch not available");
return;
}
if (this->_boardType == DIY_PRO_INDOOR_V4_2) {
pinMode(this->_bsp->SW.pin, INPUT_PULLUP);
} else {
pinMode(this->_bsp->SW.pin, INPUT);
}
this->_isBegin = true;
AgLog("Initialize");
}
/**
* @brief Get button state, Alway retrun State::BUTTON_RELEASED if no-initialize
*
* @return PushButton::State
*/
PushButton::State PushButton::getState(void) {
if (this->isBegin() == false) {
return State::BUTTON_RELEASED;
}
if (digitalRead(this->_bsp->SW.pin) == this->_bsp->SW.activeLevel) {
return State::BUTTON_PRESSED;
}
return State::BUTTON_RELEASED;
}
/**
* @brief Get PushButton::State as string
*
* @param state Buttons State
* @return String
*/
String PushButton::toString(PushButton::State state) {
if (state == BUTTON_PRESSED) {
return "Presssed";
}
return "Released";
}
bool PushButton::isBegin(void) {
if (this->_isBegin) {
return true;
}
AgLog("Switch not initialized");
return false;
}