From 46a87ebe2618a25915aa10cb76eb4de9a1319be0 Mon Sep 17 00:00:00 2001 From: biver Date: Wed, 12 Jan 2022 10:00:19 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA?= =?UTF-8?q?=D1=83=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BB=D0=BB=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20LCD2004=20=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B2=D0=BE=D0=B4=D0=B8=D0=BC=20=D0=BF=D0=BE=D1=80=D1=8F?= =?UTF-8?q?=D0=B4=D0=BE=D0=BA=20=D1=81=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8?= =?UTF-8?q?=D0=BE=D1=82=D0=B5=D0=BA=D0=B0=D0=BC=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data_esp/items/items.txt | 2 +- data_esp/set.device.json.gz | Bin 3153 -> 3151 bytes include/items/vSensorLCD2004.h | 6 ++- platformio.ini | 12 ++--- src/Init.cpp | 6 +++ src/items/vSensorLCD2004.cpp | 86 +++++++++++++++------------------ 6 files changed, 54 insertions(+), 58 deletions(-) diff --git a/data_esp/items/items.txt b/data_esp/items/items.txt index c7e7a660..4da9efd9 100644 --- a/data_esp/items/items.txt +++ b/data_esp/items/items.txt @@ -38,5 +38,5 @@ 0;sensor;anyid;anydata;Сенсоры;Параметр;1;c[1];int[10];type[HDC1080_hum];addr[0x76]* 0;sensor;anyid;anydata;Сенсоры;Параметр;1;c[1];int[10];type[AHTX0_temp];addr[0x76] 0;sensor;anyid;anydata;Сенсоры;Параметр;1;c[1];int[10];type[AHTX0_hum];addr[0x76]* -0;LCD2004;lcdid;anydata;Вывод;IP;1;addr[0х27];k[16,2];int[10];c[0,0];val[ip]* +0;LCD2004;lcdid;anydata;Вывод;IP;1;addr[0x27];k[16,2];int[10];c[0,0];val[ip]* 0;sensor;anyid;anydata;Сенсоры;Параметр;1;c[1];int[10];type[type1];addr[0x76]* \ No newline at end of file diff --git a/data_esp/set.device.json.gz b/data_esp/set.device.json.gz index bd42d625048aa4914821987106e47e655bb0b86d..329723f7f2fc2e79fd4b93bf63d76e7e30fdb397 100644 GIT binary patch delta 3050 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 delta 3052 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 #include "Global.h" #include "LiquidCrystal_I2C.h" -#include "LiquidCrystal.h" + class SensorLCD2004; @@ -17,6 +17,8 @@ class SensorLCD2004 { void loop(); void writeLCD2004(); + void execute(String command); + String _key; private: unsigned long currentMillis; @@ -27,8 +29,8 @@ class SensorLCD2004 { unsigned int _x; unsigned int _y; String _val; - String _key; String _descr; + int _prevStrSize; }; extern MySensorLCD2004Vector* mySensorLCD20042; diff --git a/platformio.ini b/platformio.ini index da9411d9..bc2ece4d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -43,9 +43,8 @@ lib_deps = robtillaart/SHT2x@^0.1.1 ClosedCube HDC1080 Adafruit AHTX0 - LiquidCrystal_I2C BH1750 - fmalpartida/LiquidCrystal@^1.5.0 + marcoschwartz/LiquidCrystal_I2C@^1.1.4 monitor_filters = esp8266_exception_decoder upload_speed = 921600 monitor_speed = 115200 @@ -72,9 +71,8 @@ lib_deps = robtillaart/SHT2x@^0.1.1 ClosedCube HDC1080 Adafruit AHTX0 - LiquidCrystal_I2C BH1750 - fmalpartida/LiquidCrystal@^1.5.0 + marcoschwartz/LiquidCrystal_I2C@^1.1.4 monitor_filters = esp8266_exception_decoder upload_speed = 921600 monitor_speed = 115200 @@ -92,7 +90,7 @@ lib_deps = ESPAsyncUDP CTBot @2.1.6 MySensors @2.3.2 - fmalpartida/LiquidCrystal@^1.5.0 + marcoschwartz/LiquidCrystal_I2C@^1.1.4 monitor_filters = esp8266_exception_decoder upload_speed = 921600 monitor_speed = 115200 @@ -120,9 +118,8 @@ lib_deps = robtillaart/SHT2x@^0.1.1 ClosedCube HDC1080 Adafruit AHTX0 - LiquidCrystal_I2C BH1750 - fmalpartida/LiquidCrystal@^1.5.0 + marcoschwartz/LiquidCrystal_I2C@^1.1.4 monitor_filters = esp32_exception_decoder upload_speed = 921600 monitor_speed = 115200 @@ -143,6 +140,7 @@ lib_deps = ESP32Servo MySensors @2.3.2 fmalpartida/LiquidCrystal@^1.5.0 + marcoschwartz/LiquidCrystal_I2C@^1.1.4 monitor_filters = esp32_exception_decoder upload_speed = 921600 monitor_speed = 115200 diff --git a/src/Init.cpp b/src/Init.cpp index ae9d692d..19781682 100644 --- a/src/Init.cpp +++ b/src/Init.cpp @@ -24,6 +24,10 @@ #include "items/vSensorUltrasonic.h" #include "items/vSensorUptime.h" +#ifdef EnableSensorLCD2004 +extern LiquidCrystal_I2C *LCDI2C; +#endif + void loadConfig() { configSetupJson = readFile("config.json", 4096); configSetupJson.replace("\r\n", ""); @@ -172,7 +176,9 @@ void clearVectors() { #endif #ifdef EnableSensorLCD2004 if (mySensorLCD20042 != nullptr) { + if(LCDI2C != nullptr) LCDI2C->clear(); mySensorLCD20042->clear(); + } #endif #ifdef EnableSensorUltrasonic diff --git a/src/items/vSensorLCD2004.cpp b/src/items/vSensorLCD2004.cpp index aca92d17..dfb66eb6 100644 --- a/src/items/vSensorLCD2004.cpp +++ b/src/items/vSensorLCD2004.cpp @@ -9,8 +9,6 @@ #include - -LiquidCrystal *LCDLPT; LiquidCrystal_I2C *LCDI2C; SensorLCD2004::SensorLCD2004(String key, unsigned long interval, unsigned int x, unsigned int y, String val, String descr) { @@ -20,11 +18,18 @@ SensorLCD2004::SensorLCD2004(String key, unsigned long interval, unsigned int x, _y = y; _val = val; _descr = descr; - + _prevStrSize = 0; } SensorLCD2004::~SensorLCD2004() {} +void SensorLCD2004::execute(String command) { + //if (command == "back") + + String par = sCmd.next(); + //SerialPrint("I", "execute", command + " " + par); +} + void SensorLCD2004::loop() { currentMillis = millis(); difference = currentMillis - prevMillis; @@ -35,34 +40,36 @@ void SensorLCD2004::loop() { } void SensorLCD2004::writeLCD2004() { - String tmpStr; - tmpStr = getValue(_val); - if (tmpStr == "no value") tmpStr = _val; - - if (_descr != "none") tmpStr = _descr + " " + tmpStr; - - if(LCDI2C != nullptr) { + if (LCDI2C != nullptr) { + String tmpStr = ""; + for(int i=0; i<_prevStrSize; i++) tmpStr += " "; LCDI2C->setCursor(_x, _y); - LCDI2C->print(tmpStr); - } + LCDI2C->print(tmpStr); - if(LCDLPT != nullptr) { - LCDLPT->setCursor(_x, _y); - LCDLPT->print(tmpStr); - } + tmpStr = getValue(_val); + if (tmpStr == "no value") tmpStr = _val; + if (_descr != "none") tmpStr = _descr + " " + tmpStr; + LCDI2C->setCursor(_x, _y); + LCDI2C->print(tmpStr); - //eventGen2(_key, String(_val)); - //jsonWriteStr(configLiveJson, _key, String(_val)); - //publishStatus(_key, String(_val)); - SerialPrint("I", "Sensor", "'" + _key + "' data2: " + String(tmpStr)); + _prevStrSize = tmpStr.length(); + } } MySensorLCD2004Vector* mySensorLCD20042 = nullptr; +void lcd2004Execute() { + String key = sCmd.order(); + String command = sCmd.next(); + + for (unsigned int i = 0; i < mySensorLCD20042->size(); i++) { + if (mySensorLCD20042->at(i)._key == key) mySensorLCD20042->at(i).execute(command); + } +} + void lcd2004() { myLineParsing.update(); String key = myLineParsing.gkey(); - String pin = myLineParsing.gpin(); String addr = myLineParsing.gaddr(); String interval = myLineParsing.gint(); String c = myLineParsing.gc(); @@ -73,35 +80,15 @@ void lcd2004() { int x = selectFromMarkerToMarker(c, ",", 0).toInt(); int y = selectFromMarkerToMarker(c, ",", 1).toInt(); - int w = selectFromMarkerToMarker(k, ",", 1).toInt(); //количество столбцов + int w = selectFromMarkerToMarker(k, ",", 0).toInt(); //количество столбцов int h = selectFromMarkerToMarker(k, ",", 1).toInt(); //количество строк - if (LCDI2C == nullptr && LCDLPT == nullptr) { //инициализации экрана еще не было - if (addr == "") { - int pin1 = selectFromMarkerToMarker(pin, ",", 0).toInt(); - int pin2 = selectFromMarkerToMarker(pin, ",", 1).toInt(); - int pin3 = selectFromMarkerToMarker(pin, ",", 2).toInt(); - int pin4 = selectFromMarkerToMarker(pin, ",", 3).toInt(); - int pin5 = selectFromMarkerToMarker(pin, ",", 4).toInt(); - int pin6 = selectFromMarkerToMarker(pin, ",", 5).toInt(); - int pin7 = selectFromMarkerToMarker(pin, ",", 6).toInt(); - int pin8 = selectFromMarkerToMarker(pin, ",", 7).toInt(); - int pin9 = selectFromMarkerToMarker(pin, ",", 8).toInt(); - int pin10 = selectFromMarkerToMarker(pin, ",", 9).toInt(); - if (pin7) { - LCDLPT = new LiquidCrystal(pin1, pin2, pin3, pin4, pin5, pin6, pin7, pin8, pin9, pin10); - } else { - LCDLPT = new LiquidCrystal(pin1, pin2, pin3, pin4, pin5, pin6); - } - if(LCDLPT != nullptr) LCDLPT->begin(w, h); - //val = (String)pin1 + " " + (String)pin2 + " " + (String)pin3 + " " + (String)pin4 + " " + (String)pin5 + " " + (String)pin6 + " " + (String)pin7 + " " + (String)pin8 + " " + (String)pin9 + " " + (String)pin10; - } else { - LCDI2C = new LiquidCrystal_I2C(hexStringToUint8(addr)); - if(LCDI2C != nullptr) { - LCDI2C->begin(w, h); - LCDI2C->backlight(); - } - } + if (LCDI2C == nullptr) { //инициализации экрана еще не было + LCDI2C = new LiquidCrystal_I2C(hexStringToUint8(addr), w, h);//hexStringToUint8(addr), w, h); + if(LCDI2C != nullptr) { + LCDI2C->init(); + LCDI2C->backlight(); + } } @@ -109,5 +96,8 @@ void lcd2004() { if (firstTime) mySensorLCD20042 = new MySensorLCD2004Vector(); firstTime = false; mySensorLCD20042->push_back(SensorLCD2004(key, interval.toInt(), x, y, val, descr)); + + sCmd.addCommand(key.c_str(), lcd2004Execute); } + #endif