diff --git a/src/modules/display/Lcd2004/Lcd2004.cpp b/src/modules/display/Lcd2004/Lcd2004.cpp index 0caf4ebe..5ddd92b5 100644 --- a/src/modules/display/Lcd2004/Lcd2004.cpp +++ b/src/modules/display/Lcd2004/Lcd2004.cpp @@ -1,22 +1,14 @@ #include "Global.h" #include "classes/IoTItem.h" - -//#include "LiquidCrystal_I2C.h" #include -#include - -void scanI2C(); - -//LiquidCrystal_I2C *LCDI2C; RobotClass_LiquidCrystal_I2C *LCDI2C; class Lcd2004 : public IoTItem { private: unsigned int _x; unsigned int _y; - String _id2show; - String _descr; + String _id2show, _prefix = "", _postfix = ""; int _prevStrSize; String _addr; @@ -37,42 +29,52 @@ class Lcd2004 : public IoTItem { int w = selectFromMarkerToMarker(size, ",", 0).toInt(); //количество столбцов int h = selectFromMarkerToMarker(size, ",", 1).toInt(); //количество строк if (LCDI2C == nullptr) { //инициализации экрана еще не было - //LCDI2C = new LiquidCrystal_I2C(hexStringToUint8(_addr), w, h); LCDI2C = new RobotClass_LiquidCrystal_I2C(hexStringToUint8(_addr), w, h, CP_UTF8); if (LCDI2C != nullptr) { LCDI2C->init(); + LCDI2C->clear(); + LCDI2C->backlight(); } } - - LCDI2C->clear(); - LCDI2C->backlight(); jsonRead(parameters, "coord", xy); _x = selectFromMarkerToMarker(xy, ",", 0).toInt(); _y = selectFromMarkerToMarker(xy, ",", 1).toInt(); - jsonRead(parameters, "descr", _descr); jsonRead(parameters, "id2show", _id2show); + jsonRead(parameters, "prefix", _prefix); + jsonRead(parameters, "postfix", _postfix); } - void doByInterval() { - if (LCDI2C != nullptr) { - printBlankStr(_prevStrSize); - - String tmpStr = getItemValue(_id2show); - if (_descr != "none") tmpStr = _descr + " " + tmpStr; - LCDI2C->setCursor(_x, _y); - LCDI2C->print(tmpStr); - - //LCDI2C->print("Helloy,Manager 404 !"); - //Serial.printf("ffff %s\n", _id2show); - _prevStrSize = tmpStr.length(); - } else { - scanI2C(); + void drawItem(IoTItem* item) { + String tmpStr = _prefix; + tmpStr += item->getValue(); + tmpStr += _postfix; + + printBlankStr(_prevStrSize); + LCDI2C->setCursor(_x, _y); + LCDI2C->print(tmpStr); + _prevStrSize = tmpStr.length(); + } + + void setValue(const IoTValue& Value, bool genEvent = true) { + if (LCDI2C == nullptr) return; + + value = Value; + drawItem(this); + IoTItem::setValue(Value, genEvent); + } + + void onRegEvent(IoTItem* eventItem) { + if (LCDI2C == nullptr) { scanI2C(); return;} + if (!eventItem || _id2show == "") return; + + if (_id2show == eventItem->getID()) { + setValue(eventItem->value, false); } } - IoTValue execute(String command, std::vector ¶m) { // будет возможным использовать, когда сценарии запустятся + IoTValue execute(String command, std::vector ¶m) { if (command == "noBacklight") LCDI2C->noBacklight(); else if (command == "backlight") @@ -99,9 +101,13 @@ class Lcd2004 : public IoTItem { if (param.size()) { _y = param[0].valD; } - } else if (command == "descr") { + } else if (command == "prefix") { if (param.size()) { - _descr = param[0].valS; + _prefix = param[0].valS; + } + } else if (command == "postfix") { + if (param.size()) { + _postfix = param[0].valS; } } else if (command == "id2show") { if (param.size()) { diff --git a/src/modules/display/Lcd2004/modinfo.json b/src/modules/display/Lcd2004/modinfo.json index 024750b8..0cc656ef 100644 --- a/src/modules/display/Lcd2004/modinfo.json +++ b/src/modules/display/Lcd2004/modinfo.json @@ -7,30 +7,32 @@ "type": "Reading", "subtype": "Lcd2004", "id": "Lcd", - "widget": "", - "page": "", - "descr": "T", + "widget": "inputTxt", + "page": "Экраны", + "descr": "LCD Экран", - "int": 15, "addr": "0x27", "size": "20,4", "coord": "0,0", - "id2show": "id датчика" + "id2show": "", + "prefix": "", + "postfix": "" }, { "name": "LCD экран 1602", "type": "Reading", "subtype": "Lcd2004", "id": "Lcd", - "widget": "", - "page": "", - "descr": "T", + "widget": "inputTxt", + "page": "Экраны", + "descr": "LCD Экран", - "int": 15, "addr": "0x27", "size": "16,2", "coord": "0,0", - "id2show": "id датчика" + "id2show": "", + "prefix": "", + "postfix": "" }], "about": { @@ -46,11 +48,12 @@ }, "moduleDesc": "Позволяет выводить на символьные экраны по указанным позициям значения других элементов конфигурации.", "propInfo": { - "int": "Период времени в секундах обновления информации на экране по конкретному элементу.", - "addr": "Адрес устройства на шине, обычно 0x27.", + "addr": "Адрес устройства на шине, обычно 0x27. Установите пустую строку для включения режима сканирования адресов на шине (результат в консоли).", "size": "Размерность матрицы экрана.", "coord": "Координата позиции для вывода данных элемента конфигурации.", - "id2show": "id элемента конфигурации." + "id2show": "id элемента конфигурации для отображения на экране. Если пустое значение, то данные берутся из собственной переменной.", + "prefix": "Символы до значения.", + "postfix": "Символы после значения." }, "funcInfo": [ { @@ -89,10 +92,15 @@ "params": ["Номер столбца первого символа"] }, { - "name": "descr", + "name": "prefix", "descr": "Задает приставку слева от значения", "params": ["Строка"] }, + { + "name": "postfix", + "descr": "Задает приставку справа от значения", + "params": ["Строка"] + }, { "name": "id2show", "descr": "Задает ИД элемента, значение которого хотим отображать на экране",