Аналоговый счетчик импульсов. Multitouch V2

This commit is contained in:
avaksru
2023-04-27 11:46:16 +03:00
parent 219d6e3f6b
commit 311a379e1a
9 changed files with 296 additions and 83 deletions

View File

@@ -0,0 +1,87 @@
#include "Global.h"
#include "classes/IoTItem.h"
extern IoTGpio IoTgpio;
class Impulse : public IoTItem
{
private:
int _int;
int _pin;
bool _buttonState, _reading;
bool _lastButtonState = LOW;
unsigned long _lastDebounceTime = 0;
int _debounceDelay = 50;
int _count = 0;
unsigned long timing;
public:
Impulse(String parameters) : IoTItem(parameters)
{
String _pinMode;
jsonRead(parameters, F("pin"), _pin);
jsonRead(parameters, F("pinMode"), _pinMode);
jsonRead(parameters, F("debounceDelay"), _debounceDelay);
jsonRead(parameters, "int", _int);
_round = 0;
if (_pinMode == F("INPUT"))
IoTgpio.pinMode(_pin, INPUT);
else if (_pinMode == F("INPUT_PULLUP"))
IoTgpio.pinMode(_pin, INPUT_PULLUP);
else if (_pinMode == F("INPUT_PULLDOWN"))
{
IoTgpio.pinMode(_pin, INPUT);
IoTgpio.digitalWrite(_pin, LOW);
}
value.valD = _buttonState = IoTgpio.digitalRead(_pin);
regEvent(_buttonState, "", false, false);
}
void loop()
{
_reading = IoTgpio.digitalRead(_pin);
if (_reading != _lastButtonState)
{
_lastDebounceTime = millis();
}
if ((millis() - _lastDebounceTime) > _debounceDelay)
{
if (_reading != _buttonState)
{
_buttonState = _reading;
_count++;
}
if (_count == 1)
{
timing = millis();
}
if (millis() - timing > _int * 1000 && _count > 1)
{
timing = millis();
value.valD = _count;
regEvent(value.valD, F("Impulse"));
_count = 0;
}
}
_lastButtonState = _reading;
}
~Impulse(){};
};
void *getAPI_Impulse(String subtype, String param)
{
if (subtype == F("Impulse"))
{
return new Impulse(param);
}
else
{
return nullptr;
}
}

View File

@@ -0,0 +1,49 @@
{
"menuSection": "Сенсоры",
"configItem": [
{
"global": 0,
"name": "Аналоговый счетчик импульсов",
"type": "Writing",
"subtype": "Impulse",
"id": "impulse",
"widget": "anydataDef",
"page": "Счетчики",
"descr": "Импульсов",
"needSave": 0,
"int": 1,
"pin": 16,
"pinMode": "INPUT",
"debounceDelay": 3
}
],
"about": {
"authorName": "AVAKS",
"authorContact": "https://t.me/@avaks_dev",
"authorGit": "https://github.com/avaksru",
"specialThanks": "",
"moduleName": "Impulse",
"moduleVersion": "2.0",
"usedRam": {
"esp32_4mb": 15,
"esp8266_4mb": 15
},
"title": "Аналоговый счетчик импульсов. Датчик Холла ",
"moduleDesc": "Считает количество импульсов за период времени",
"propInfo": {
"int": "Период сбора импульсов в секундах",
"pin": "Укажите GPIO номер пина для чтения импульсов",
"pinMode": "Может быть INPUT_PULLUP INPUT_PULLDOWN INPUT",
"debounceDelay": "Время обработки дребезга (миллисекунд)"
}
},
"defActive": true,
"usedLibs": {
"esp32_4mb": [],
"esp8266_4mb": [],
"esp8266_1mb": [],
"esp8266_1mb_ota": [],
"esp8285_1mb": [],
"esp8285_1mb_ota": []
}
}