Merge pull request #232 from biveraxe/ver4dev

Добавляем в UART в режиме обмена с экранами Nextion доп контроль
This commit is contained in:
2022-11-07 17:48:38 +03:00
committed by GitHub
4 changed files with 79 additions and 18 deletions

View File

@@ -27,6 +27,7 @@ class IoTItem {
int getIntFromNet(); int getIntFromNet();
virtual String getValue(); virtual String getValue();
long getInterval(); long getInterval();
bool isGlobal();
void setInterval(long interval); void setInterval(long interval);
void setIntFromNet(int interval); void setIntFromNet(int interval);

View File

@@ -59,6 +59,8 @@ String IoTItem::getValue() {
long IoTItem::getInterval() { return _interval; } long IoTItem::getInterval() { return _interval; }
bool IoTItem::isGlobal() { return _global;}
//определяем тип прилетевшей величины //определяем тип прилетевшей величины
void IoTItem::setValue(const String& valStr, bool genEvent) { void IoTItem::setValue(const String& valStr, bool genEvent) {
value.isDecimal = isDigitDotCommaStr(valStr); value.isDecimal = isDigitDotCommaStr(valStr);

View File

@@ -90,30 +90,31 @@ class UART : public IoTItem {
} }
void onRegEvent(IoTItem* eventItem) { void onRegEvent(IoTItem* eventItem) {
if (!_myUART) return; if (!_myUART || !eventItem) return;
String printStr = ""; String printStr = "";
switch (_eventFormat) { switch (_eventFormat) {
case 0: return; // не указан формат, значит не следим за событиями case 0: return; // не указан формат, значит не следим за событиями
case 1: // формат событий IoTM с использованием json case 1: // формат событий IoTM с использованием json
if (eventItem->isGlobal()) {
eventItem->getNetEvent(printStr); eventItem->getNetEvent(printStr);
_myUART->println(printStr); _myUART->println(printStr);
}
break; break;
case 2: // формат событий для Nextion ID=Value0xFF0xFF0xFF case 2: // формат событий для Nextion ID=Value0xFF0xFF0xFF
printStr += eventItem->getID(); printStr += eventItem->getID();
printStr += "="; if (printStr.indexOf("_") == -1) return; // пропускаем событие, если нет используемого признака типа данных - _txt или _vol
if (eventItem->value.isDecimal) if (printStr.indexOf("_val") > 0) {
printStr += eventItem->getRoundValue(); printStr.replace("_val", ".val=");
else { printStr += eventItem->getValue();
} else if (printStr.indexOf("_txt") > 0) {
printStr.replace("_txt", ".txt=");
printStr += "\""; printStr += "\"";
printStr += eventItem->value.valS; printStr += eventItem->getValue();
printStr += "\""; printStr += "\"";
} } else return;
_myUART->print(printStr); uartPrintFFF(printStr);
_myUART->write(0xff);
_myUART->write(0xff);
_myUART->write(0xff);
break; break;
} }
} }
@@ -122,12 +123,27 @@ class UART : public IoTItem {
uartHandle(); uartHandle();
} }
void uartPrint(const String& msg) { void uartPrintFFF(const String& msg) {
if (_myUART) {
_myUART->print(msg);
_myUART->write(0xff);
_myUART->write(0xff);
_myUART->write(0xff);
}
}
void uartPrintln(const String& msg) {
if (_myUART) { if (_myUART) {
_myUART->println(msg); _myUART->println(msg);
} }
} }
void uartPrint(const String& msg) {
if (_myUART) {
_myUART->print(msg);
}
}
void uartPrintHex(const String& msg) { void uartPrintHex(const String& msg) {
if (!_myUART) return; if (!_myUART) return;
@@ -141,14 +157,33 @@ class UART : public IoTItem {
} }
IoTValue execute(String command, std::vector<IoTValue> &param) { IoTValue execute(String command, std::vector<IoTValue> &param) {
if (command == "print") { if (command == "println") {
if (param.size() == 1) { if (param.size() == 1) {
uartPrint(param[0].valS); if (param[0].isDecimal) uartPrintln((String)param[0].valD);
else uartPrintln(param[0].valS);
}
} else if (command == "print") {
if (param.size() == 1) {
if (param[0].isDecimal) uartPrint((String)param[0].valD);
else uartPrint(param[0].valS);
} }
} else if (command == "printHex") { } else if (command == "printHex") {
if (param.size() == 1) { if (param.size() == 1) {
uartPrintHex(param[0].valS); uartPrintHex(param[0].valS);
} }
} else if (command == "printFFF") {
if (param.size() == 2) {
String strToUart = "";
if (param[0].isDecimal)
strToUart = param[0].valD;
else
strToUart = param[0].valS;
if (param[1].valD)
uartPrintFFF("\"" + strToUart + "\"");
else
uartPrintFFF(strToUart);
}
} }
return {}; return {};

View File

@@ -35,8 +35,31 @@
"tx": "TX пин", "tx": "TX пин",
"rx": "RX пин", "rx": "RX пин",
"speed": "Скорость UART", "speed": "Скорость UART",
"eventFormat": "Выбор формата обмена сообщениями с другими контроллерами. =0 - не указан формат, значит не следим за событиями, =1 - формат событий IoTM с использованием json, =2 - формат событий для Nextion отправка событий: ID=Value0xFF0xFF0xFF прием ордеров: ID=Value" "eventFormat": "Выбор формата обмена сообщениями с другими контроллерами. =0 - не указан формат, значит не следим за событиями, =1 - формат событий IoTM с использованием json, =2 - формат событий для Nextion отправка событий: ID.val=Value0xFF0xFF0xFF прием ордеров: ID=Value. Отправляться будут события тех элементов, которые имеют суффикс в ИД _val или _txt, которые влияют на передаваемый формат."
},
"retInfo": "Содержит полученное последнее по UART сообщение.",
"funcInfo": [
{
"name": "println",
"descr": "Отправить в UART строку текста и признак завершения строки (перевод строки).",
"params": ["Строка текста"]
},
{
"name": "print",
"descr": "Отправить в UART строку текста.",
"params": ["Строка текста"]
},
{
"name": "printHex",
"descr": "Отправить в UART HEX-строку.",
"params": ["HEX-строка."]
},
{
"name": "printFFF",
"descr": "Отправить в UART текстовую строку и hex метку 3 байта 0xFF0xFF0xFF.",
"params": ["Строка текста", "1 - обернуть строку в кавычки, 0 - отправить без кавычек"]
} }
]
}, },
"defActive": true, "defActive": true,
"usedLibs": { "usedLibs": {