mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
Новый модуль AnalogBtn для распознавания аналоговых кнопок
по уровню аналогового сигнала
This commit is contained in:
54
src/modules/exec/AnalogBtn/AnalogBtn.cpp
Normal file
54
src/modules/exec/AnalogBtn/AnalogBtn.cpp
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
43
src/modules/exec/AnalogBtn/modinfo.json
Normal file
43
src/modules/exec/AnalogBtn/modinfo.json
Normal file
@@ -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*": []
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user