From 8aad1ba87d0731d3325128c421ebebc1a5cef210 Mon Sep 17 00:00:00 2001 From: biver Date: Sat, 1 Oct 2022 10:11:02 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B2=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B5=D1=80=20?= =?UTF-8?q?=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D1=83=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B7?= =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/virtual/Timer/Timer.cpp | 6 +++++- src/modules/virtual/Timer/modinfo.json | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/modules/virtual/Timer/Timer.cpp b/src/modules/virtual/Timer/Timer.cpp index aad43c5e..e5cc7039 100644 --- a/src/modules/virtual/Timer/Timer.cpp +++ b/src/modules/virtual/Timer/Timer.cpp @@ -49,9 +49,13 @@ class Timer : public IoTItem { } else if (command == "continue") { _pause = false; } else if (command == "int") { - if (param.size()) { + if (param.size() == 1) { setInterval(param[0].valD); } + } else if (command == "setInitCountDown") { + if (param.size() == 1) { + _initValue = param[0].valD; + } } return {}; diff --git a/src/modules/virtual/Timer/modinfo.json b/src/modules/virtual/Timer/modinfo.json index f32e2cab..9864fd3b 100644 --- a/src/modules/virtual/Timer/modinfo.json +++ b/src/modules/virtual/Timer/modinfo.json @@ -55,6 +55,11 @@ "name": "int", "descr": "Можно изменить шаг тиков.", "params": ["Число в секундах"] + }, + { + "name": "setInitCountDown", + "descr": "Меняем начальное значение счетчика, устанавливаемое после сброса.", + "params": ["Число в секундах"] } ] }, From 98812e7470a9eb82206dc3003e1a37d5bb5edae7 Mon Sep 17 00:00:00 2001 From: biver Date: Sat, 1 Oct 2022 22:57:42 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D0=B8=20Mcp23017?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/exec/Mcp23017/modinfo.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/modules/exec/Mcp23017/modinfo.json b/src/modules/exec/Mcp23017/modinfo.json index 46cff903..df39e826 100644 --- a/src/modules/exec/Mcp23017/modinfo.json +++ b/src/modules/exec/Mcp23017/modinfo.json @@ -36,12 +36,12 @@ "devices": { "esp32_4mb": [ - "adafruit/Adafruit MCP23017 Arduino Library@^2.0.2", - "adafruit/Adafruit BusIO @ ^1.13.0" + "adafruit/Adafruit MCP23017 Arduino Library@^2.1.0", + "adafruit/Adafruit BusIO @ ^1.13.2" ], "esp8266_4mb": [ - "adafruit/Adafruit MCP23017 Arduino Library@^2.0.2", - "adafruit/Adafruit BusIO @ ^1.13.0" + "adafruit/Adafruit MCP23017 Arduino Library@^2.1.0", + "adafruit/Adafruit BusIO @ ^1.13.2" ] } } \ No newline at end of file From 7def6d05437c9c62476cec1fbf11cd5ab7cae105 Mon Sep 17 00:00:00 2001 From: biver Date: Sat, 1 Oct 2022 22:58:27 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D0=B5=D0=BC=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20c=20?= =?UTF-8?q?=D0=B4=D1=80=D0=B0=D0=B9=D0=B2=D0=B5=D1=80=D0=B0=D0=BC=D0=B8=20?= =?UTF-8?q?IoTGpio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/classes/IoTItem.h | 2 +- src/ESPConfiguration.cpp | 3 +- src/classes/IoTItem.cpp | 4 +- src/modules/exec/Mcp23017/Mcp23017.cpp | 91 +++++++++++++++----------- 4 files changed, 58 insertions(+), 42 deletions(-) diff --git a/include/classes/IoTItem.h b/include/classes/IoTItem.h index 32a57351..e16e536e 100644 --- a/include/classes/IoTItem.h +++ b/include/classes/IoTItem.h @@ -41,7 +41,7 @@ class IoTItem { bool needSave = false; bool enableDoByInt = true; - virtual bool isGpioDriver(); + virtual IoTGpio* getGpioDriver(); virtual void setValue(IoTValue Value); virtual void setValue(String valStr); diff --git a/src/ESPConfiguration.cpp b/src/ESPConfiguration.cpp index 9c05b39a..0a70e979 100644 --- a/src/ESPConfiguration.cpp +++ b/src/ESPConfiguration.cpp @@ -26,8 +26,9 @@ void configure(String path) { //(IoTItem*) - getAPI вернула ссылку, что бы ее привести к классу IoTItem используем myIoTItem = (IoTItem*)getAPI(subtype, jsonArrayElement); if (myIoTItem) { + void* driver; // пробуем спросить драйвер GPIO - if (myIoTItem->isGpioDriver()) IoTgpio.regDriver((IoTGpio*)myIoTItem); + if (driver = myIoTItem->getGpioDriver()) IoTgpio.regDriver((IoTGpio*)driver); IoTItems.push_back(myIoTItem); } diff --git a/src/classes/IoTItem.cpp b/src/classes/IoTItem.cpp index 34355e05..68f88c96 100644 --- a/src/classes/IoTItem.cpp +++ b/src/classes/IoTItem.cpp @@ -146,8 +146,8 @@ void IoTItem::setInterval(unsigned long interval) { _interval = interval; } -bool IoTItem::isGpioDriver() { - return false; +IoTGpio* IoTItem::getGpioDriver() { + return nullptr; } //сетевое общение==================================================================================================================================== diff --git a/src/modules/exec/Mcp23017/Mcp23017.cpp b/src/modules/exec/Mcp23017/Mcp23017.cpp index 07f77bab..657a3fde 100644 --- a/src/modules/exec/Mcp23017/Mcp23017.cpp +++ b/src/modules/exec/Mcp23017/Mcp23017.cpp @@ -3,64 +3,79 @@ #include "classes/IoTGpio.h" #include -class Mcp23017 : public IoTItem, IoTGpio { +void scanI2C(); + +class Mcp23017Driver : public IoTGpio { private: + Adafruit_MCP23X17 _mcp; + public: - Adafruit_MCP23X17 mcp; - - Mcp23017(String parameters, int index) : IoTItem(parameters), IoTGpio(index) { - } - - void doByInterval() { - // regEvent(value.valD, "Mcp23017"); - } - - //возвращает ссылку на экземпляр класса Mcp23017 - bool isGpioDriver() { - return true; + Mcp23017Driver(int index, String addr) : IoTGpio(index) { + if (!_mcp.begin_I2C(hexStringToUint8(addr))) { + Serial.println("MCP23X17 Init Error."); + } } void pinMode(uint8_t pin, uint8_t mode) { - mcp.pinMode(pin, mode); + _mcp.pinMode(pin, mode); } void digitalWrite(uint8_t pin, uint8_t val) { - mcp.digitalWrite(pin, val); + _mcp.digitalWrite(pin, val); } int digitalRead(uint8_t pin) { - return mcp.digitalRead(pin); + return _mcp.digitalRead(pin); } void digitalInvert(uint8_t pin) { - mcp.digitalWrite(pin, 1 - mcp.digitalRead(pin)); + _mcp.digitalWrite(pin, 1 - _mcp.digitalRead(pin)); } - ~Mcp23017(){}; + ~Mcp23017Driver() {}; +}; + + +class Mcp23017 : public IoTItem { + private: + Mcp23017Driver* _driver; + + public: + Mcp23017(String parameters) : IoTItem(parameters) { + _driver = nullptr; + + String addr; + jsonRead(parameters, "addr", addr); + if (addr == "") { + scanI2C(); + return; + } + + int index; + jsonRead(parameters, "index", index); + if (index > 4) { + Serial.println("MCP23X17 wrong index. Must be 0 - 4"); + return; + } + + _driver = new Mcp23017Driver(index, addr); + } + + void doByInterval() {} + + //возвращает ссылку на экземпляр класса Mcp23017Driver + IoTGpio* getGpioDriver() { + return _driver; + } + + ~Mcp23017() { + delete _driver; + }; }; void* getAPI_Mcp23017(String subtype, String param) { if (subtype == F("Mcp23017")) { - String addr; - jsonRead(param, "addr", addr); - Serial.printf("deviceAddress %s = %02x \n", addr.c_str(), hexStringToUint8(addr)); - - String index_str; - jsonRead(param, "index", index_str); - int index = index_str.toInt(); - if (index > 4) { - Serial.println("MCP23X17 wrong index. Must be 0 - 4"); - return nullptr; - } - - Mcp23017* newItem = new Mcp23017(param, index); - if (!newItem->mcp.begin_I2C(hexStringToUint8(addr))) { - Serial.println("MCP23X17 Init Error."); - delete newItem; - return nullptr; - } - - return newItem; + return new Mcp23017(param); } else { return nullptr; }