Добавляем в приемник 433 интервал игнорирования повторов

Типа защиты от виртуального дребезга контактов
This commit is contained in:
2023-02-24 16:28:04 +03:00
parent a0b8f4067d
commit 1cbe0394ef
2 changed files with 20 additions and 5 deletions

View File

@@ -9,11 +9,16 @@ class RCswitch : public IoTItem {
private:
int _pinRx; // Выход радио модуля
int _pinTx; // Выход модуля передатчика
int _intRepeat = 6;
int _repeatCount = 0;
unsigned long _oldValue = 0;
unsigned long _newValue = 0;
public:
RCswitch(String parameters): IoTItem(parameters) {
jsonRead(parameters, "pinRx", _pinRx);
jsonRead(parameters, "pinTx", _pinTx);
jsonRead(parameters, "intRepeat", _intRepeat);
_interval = _interval / 1000; // корректируем величину интервала int, теперь он в миллисекундах
if (_pinRx >= 0) {
Serial.printf("Protocol: %d", _pinRx);
@@ -32,11 +37,19 @@ class RCswitch : public IoTItem {
// Serial.print("bit ");
// Serial.print("Protocol: ");
// Serial.println( mySwitch.getReceivedProtocol() );
value.valD = mySwitch.getReceivedValue();
regEvent(value.valD, "RCswitch");
_newValue = mySwitch.getReceivedValue();
if (_newValue != _oldValue || _repeatCount > _intRepeat) {
value.valD = _newValue;
regEvent(value.valD, "RCswitch");
_oldValue = _newValue;
_repeatCount = 0;
}
mySwitch.resetAvailable();
}
if (_repeatCount <= _intRepeat) _repeatCount++;
}
IoTValue execute(String command, std::vector<IoTValue> &param) {

View File

@@ -8,7 +8,8 @@
"type": "Reading",
"subtype": "RCswitch",
"id": "rsw",
"int": 500,
"int": 100,
"intRepeat": 6,
"pinRx": 12,
"pinTx": 12
}
@@ -29,7 +30,8 @@
"propInfo": {
"pinRx": "GPIO номер, к которому подключен радио приемник 433 MHz. Если < 0, то приемник выключен",
"pinTx": "GPIO номер, к которому подключен радио передатчик 433 MHz. Если < 0, то передатчик выключен",
"int": "Количество миллисекунд между опросами датчика. 0 - выключено. (устранение повторений при нажатой кнопке)"
"int": "Количество миллисекунд между опросами датчика. 0 - выключено.",
"intRepeat": "Количество интервалов int пропускаем повторы, т.е. при int=100 и intRepeat=6, первые 600мс игнорируем одинаковые значения."
},
"retInfo": "Содержит принятое значение",
"funcInfo": [