mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-27 06:32:19 +03:00
Добавляем инверсию в кнопку подключенную к пину.
This commit is contained in:
@@ -15,6 +15,7 @@ void* getAPI_Bmp280(String subtype, String params);
|
||||
void* getAPI_Dht1122(String subtype, String params);
|
||||
void* getAPI_Ds18b20(String subtype, String params);
|
||||
void* getAPI_Pzem004(String subtype, String params);
|
||||
void* getAPI_RTC(String subtype, String params);
|
||||
void* getAPI_Sht20(String subtype, String params);
|
||||
void* getAPI_Sht30(String subtype, String params);
|
||||
void* getAPI_Sonar(String subtype, String params);
|
||||
@@ -28,6 +29,7 @@ void* getAPI_Multitouch(String subtype, String params);
|
||||
void* getAPI_Pcf8574(String subtype, String params);
|
||||
void* getAPI_Pwm8266(String subtype, String params);
|
||||
void* getAPI_TelegramLT(String subtype, String params);
|
||||
void* getAPI_DwinI(String subtype, String params);
|
||||
void* getAPI_Lcd2004(String subtype, String params);
|
||||
|
||||
void* getAPI(String subtype, String params) {
|
||||
@@ -47,6 +49,7 @@ if ((tmpAPI = getAPI_Bmp280(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Dht1122(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Ds18b20(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Pzem004(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_RTC(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Sht20(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Sht30(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Sonar(subtype, params)) != nullptr) return tmpAPI;
|
||||
@@ -60,6 +63,7 @@ if ((tmpAPI = getAPI_Multitouch(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Pcf8574(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Pwm8266(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_TelegramLT(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_DwinI(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Lcd2004(subtype, params)) != nullptr) return tmpAPI;
|
||||
return nullptr;
|
||||
}
|
||||
@@ -7,30 +7,29 @@ extern IoTGpio IoTgpio;
|
||||
class ButtonIn : public IoTItem {
|
||||
private:
|
||||
int _pin;
|
||||
bool _execLevel;
|
||||
int _fixState;
|
||||
String _pinMode;
|
||||
int _lastButtonState = LOW;
|
||||
bool _execLevel, _fixState, _inv, _buttonState, _reading;
|
||||
bool _lastButtonState = LOW;
|
||||
unsigned long _lastDebounceTime = 0;
|
||||
long _debounceDelay = 50;
|
||||
int _buttonState;
|
||||
int _reading;
|
||||
int _debounceDelay = 50;
|
||||
|
||||
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);
|
||||
_round = 0;
|
||||
//Serial.printf("vvvvvvvvvvvvvvvv =%d \n", _fixState);
|
||||
|
||||
if (_pinMode == "INPUT") IoTgpio.pinMode(_pin, INPUT);
|
||||
else if (_pinMode == "INPUT_PULLDOWN") {IoTgpio.pinMode(_pin, INPUT); IoTgpio.digitalWrite(_pin, LOW);}
|
||||
else if (_pinMode == "INPUT_PULLUP") IoTgpio.pinMode(_pin, INPUT_PULLUP);
|
||||
String _pinMode;
|
||||
|
||||
jsonRead(parameters, F("inv"), _inv);
|
||||
jsonRead(parameters, F("pin"), _pin);
|
||||
jsonRead(parameters, F("execLevel"), _execLevel);
|
||||
jsonRead(parameters, F("pinMode"), _pinMode);
|
||||
jsonRead(parameters, F("debounceDelay"), _debounceDelay);
|
||||
jsonRead(parameters, F("fixState"), _fixState);
|
||||
_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);
|
||||
if (_inv) value.valD = _buttonState = !_buttonState; // инвертируем, если нужно показания
|
||||
// сообщаем всем о стартовом статусе без генерации события
|
||||
regEvent(_buttonState, "", false, false);
|
||||
}
|
||||
@@ -48,17 +47,13 @@ class ButtonIn : public IoTItem {
|
||||
|
||||
if (_fixState == 1 && _buttonState == _execLevel) {
|
||||
value.valD = !value.valD;
|
||||
regEvent(value.valD, "ButtonIn");
|
||||
}
|
||||
|
||||
if (_fixState == 2) {
|
||||
value.valD = !value.valD;
|
||||
regEvent(value.valD, "ButtonIn");
|
||||
regEvent(value.valD, F("ButtonIn"));
|
||||
}
|
||||
|
||||
if (_fixState == 0) {
|
||||
value.valD = _buttonState;
|
||||
regEvent(value.valD, "ButtonIn");
|
||||
if (_inv) value.valD = !_buttonState; // инвертируем, если нужно показания
|
||||
regEvent(value.valD, F("ButtonIn"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -68,7 +63,7 @@ class ButtonIn : public IoTItem {
|
||||
|
||||
void setValue(const IoTValue& Value, bool genEvent = true) {
|
||||
value = Value;
|
||||
regEvent((String)(int)value.valD, "ButtonIn", false, genEvent);
|
||||
regEvent((String)(int)value.valD, F("ButtonIn"), false, genEvent);
|
||||
}
|
||||
|
||||
String getValue() {
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
"execLevel": "1",
|
||||
"pinMode": "INPUT",
|
||||
"debounceDelay": 50,
|
||||
"fixState": 0
|
||||
"fixState": 0,
|
||||
"inv": 0
|
||||
}
|
||||
],
|
||||
"about": {
|
||||
@@ -38,7 +39,8 @@
|
||||
"execLevel": "Высокий 1 или низкий 0 уровень переключения состояния в режиме fixState = 1",
|
||||
"pinMode": "Может быть INPUT_PULLUP INPUT_PULLDOWN INPUT",
|
||||
"debounceDelay": "Время обработки дребезга",
|
||||
"fixState": "Поведение входа, срабатывание на переходе или на фиксации уровня (триггерный режим)"
|
||||
"fixState": "Поведение кнопки. При fixState = 0 - нет фиксации и значение кнопки повторяет уровень сигнала на входе. fixState = 1 - кнопка работает как переключатель и переключение происходит по высокому или низкому уровню сигнала (execLevel).",
|
||||
"inv": "Инвертировать снимаемые показания на последнем этапе."
|
||||
}
|
||||
},
|
||||
"defActive": true,
|
||||
|
||||
Reference in New Issue
Block a user