From d442588ac4df298a9f9adf6d6e1a802e833ecb12 Mon Sep 17 00:00:00 2001 From: Ilya Belyakov Date: Fri, 5 Jan 2024 22:00:28 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D1=83=D0=BB=D1=8C=20AnalogBtn=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D0=BF=D0=BE=D0=B7=D0=BD=D0=B0=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B0=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D1=85=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BE=D0=BA=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=83=D1=80=D0=BE=D0=B2=D0=BD=D1=8E=20=D0=B0?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=81=D0=B8=D0=B3=D0=BD=D0=B0=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/exec/AnalogBtn/AnalogBtn.cpp | 54 ++++++++++++++++++++++++ src/modules/exec/AnalogBtn/modinfo.json | 43 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 src/modules/exec/AnalogBtn/AnalogBtn.cpp create mode 100644 src/modules/exec/AnalogBtn/modinfo.json diff --git a/src/modules/exec/AnalogBtn/AnalogBtn.cpp b/src/modules/exec/AnalogBtn/AnalogBtn.cpp new file mode 100644 index 00000000..3630f9f5 --- /dev/null +++ b/src/modules/exec/AnalogBtn/AnalogBtn.cpp @@ -0,0 +1,54 @@ +#include "Global.h" +#include "classes/IoTItem.h" + +extern IoTGpio IoTgpio; + + +class AnalogBtn : public IoTItem { + private: + int _pin, _aValue, _delta; + int _oldVal, _newVal; + + public: + AnalogBtn(String parameters) : IoTItem(parameters) { + _pin = 0; + _aValue = 0; + _delta = 50; + jsonRead(parameters, "pin", _pin); + jsonRead(parameters, "aValue", _aValue); + jsonRead(parameters, "delta", _delta); + _round = 0; + setInterval(-100); + } + + void doByInterval() { + _newVal = IoTgpio.analogRead(_pin); + if (_aValue == -1 && _oldVal != _newVal) { + _oldVal = _newVal; + SerialPrint("i", "AnalogBtn", (String)_newVal); + return; + } + + if ((_newVal > _aValue - _delta) && (_newVal < _aValue + _delta)) { + if (value.valD == 0) { + value.valD = 1; + regEvent(value.valD, "AnalogBtn"); + } + } else { + if (value.valD == 1) { + value.valD = 0; + regEvent(value.valD, "AnalogBtn"); + } + } + } + + ~AnalogBtn() {}; +}; + +void* getAPI_AnalogBtn(String subtype, String param) { + if (subtype == F("AnalogBtn")) { + return new AnalogBtn(param); + } else { + return nullptr; + } +} diff --git a/src/modules/exec/AnalogBtn/modinfo.json b/src/modules/exec/AnalogBtn/modinfo.json new file mode 100644 index 00000000..ca3d11d2 --- /dev/null +++ b/src/modules/exec/AnalogBtn/modinfo.json @@ -0,0 +1,43 @@ +{ + "menuSection": "executive_devices", + "configItem": [ + { + "global": 0, + "name": "Аналоговая кнопка", + "type": "Reading", + "subtype": "AnalogBtn", + "id": "abtn", + "widget": "toggle", + "page": "Кнопки", + "descr": "Освещение", + "pin": 34, + "aValue": -1, + "delta": 50 + } + ], + "about": { + "authorName": "Ilya Belyakov", + "authorContact": "https://t.me/Biveraxe", + "authorGit": "https://github.com/biveraxe", + "exampleURL": "https://iotmanager.org/wiki", + "specialThanks": "", + "moduleName": "AnalogBtn", + "moduleVersion": "1.0", + "usedRam": { + "esp32_4mb": 15, + "esp8266_4mb": 15 + }, + "title": "Аналоговая кнопка", + "moduleDesc": "Позволяет получить состояние кнопки на аналоговом пине.", + "propInfo": { + "pin": "Аналоговый GPIO номер, к которому подключена кнопка.", + "aValue": "Значение кнопки в диапазоне от 0 до 1023 (8266) или от 0 до 4095 (esp32). Если =-1 то включается режим отладки и в консоль отправляются значения нажимаемой кнопки.", + "delta": "Погрешность срабатывания кнопки в диапазоне +-delta." + } + }, + "defActive": true, + "usedLibs": { + "esp32*": [], + "esp82*": [] + } +} \ No newline at end of file