mirror of
https://github.com/airgradienthq/arduino.git
synced 2025-07-15 08:56:34 +02:00
75 lines
1.6 KiB
C++
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;
|
|
}
|