mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-27 22:52:19 +03:00
Структурируем модули как надо
This commit is contained in:
@@ -1,77 +0,0 @@
|
||||
#include "Global.h"
|
||||
#include "classes/IoTItem.h"
|
||||
|
||||
extern IoTGpio IoTgpio;
|
||||
|
||||
|
||||
class ButtonIn : public IoTItem {
|
||||
private:
|
||||
int _pin;
|
||||
bool _execLevel;
|
||||
int _fixState;
|
||||
String _pinMode;
|
||||
int _lastButtonState = LOW;
|
||||
unsigned long _lastDebounceTime = 0;
|
||||
unsigned long _debounceDelay = 50;
|
||||
int _buttonState;
|
||||
int _reading;
|
||||
|
||||
public:
|
||||
ButtonIn(String parameters): IoTItem(parameters) {
|
||||
jsonRead(parameters, "pin", _pin);
|
||||
jsonRead(parameters, "execLevel", _execLevel);
|
||||
jsonRead(parameters, "pinMode", _pinMode);
|
||||
jsonRead(parameters, "debounceDelay", _debounceDelay);
|
||||
jsonRead(parameters, "fixState", _fixState);
|
||||
//Serial.printf("vvvvvvvvvvvvvvvv =%d \n", _fixState);
|
||||
|
||||
IoTgpio.pinMode(_pin, INPUT);
|
||||
if (_pinMode == "INPUT_PULLUP") IoTgpio.digitalWrite(_pin, HIGH);
|
||||
else if (_pinMode == "INPUT_PULLDOWN") IoTgpio.digitalWrite(_pin, LOW);
|
||||
|
||||
|
||||
// TODO: загрузить значение из памяти иначе пока просто считываем значение текущего состояния PIN
|
||||
_lastButtonState = _buttonState = IoTgpio.digitalRead(_pin);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
_reading = IoTgpio.digitalRead(_pin);
|
||||
if (_reading != _lastButtonState) {
|
||||
// reset the debouncing timer
|
||||
_lastDebounceTime = millis();
|
||||
}
|
||||
|
||||
if ((millis() - _lastDebounceTime) > _debounceDelay) {
|
||||
if (_reading != _buttonState) {
|
||||
_buttonState = _reading;
|
||||
|
||||
if (_fixState == 1 && _buttonState == _execLevel) {
|
||||
value.valD = !value.valD;
|
||||
regEvent(value.valD, "ButtonIn");
|
||||
}
|
||||
|
||||
if (_fixState == 2) {
|
||||
value.valD = !value.valD;
|
||||
regEvent(value.valD, "ButtonIn");
|
||||
}
|
||||
|
||||
if (_fixState == 0) {
|
||||
value.valD = _buttonState;
|
||||
regEvent(value.valD, "ButtonIn");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_lastButtonState = _reading;
|
||||
}
|
||||
|
||||
~ButtonIn() {};
|
||||
};
|
||||
|
||||
void* getAPI_ButtonIn(String subtype, String param) {
|
||||
if (subtype == F("ButtonIn")) {
|
||||
return new ButtonIn(param);
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
{
|
||||
"menuSection": "Модули управления",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Кнопка (подключенная физически)",
|
||||
"type": "Writing",
|
||||
"subtype": "ButtonIn",
|
||||
"id": "btn",
|
||||
"widget": "toggle",
|
||||
"page": "Кнопки",
|
||||
"descr": "",
|
||||
"int": 0,
|
||||
|
||||
"pin": 16,
|
||||
"execLevel": "1",
|
||||
"pinMode": "INPUT",
|
||||
"debounceDelay": 50,
|
||||
"fixState": 1
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "ButtonIn",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Позволяет интерпретировать сигналы на цифровом пине как кнопку, т.е. создает в системе объект для чтения булевых значений с внешнего физического источника. Может вести себя как кнопка или как переключатель.",
|
||||
"propInfo": {
|
||||
"pin": "Укажите GPIO номер пина для чтения состояний подключенной кнопки",
|
||||
"execLevel": "Высокий 1 или низкий 0 уровень переключения состояния",
|
||||
"pinMode": "Может быть INPUT_PULLUP INPUT_PULLDOWN INPUT",
|
||||
"debounceDelay": "Время обработки дребезга",
|
||||
"fixState": "Поведение входа, срабатывание на переходе или на фиксации уровня (триггерный режим)"
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [],
|
||||
"esp8266_4mb": []
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user