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();
virtual String getValue();
long getInterval();
bool isGlobal();
void setInterval(long interval);
void setIntFromNet(int interval);

View File

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

View File

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

View File

@@ -35,8 +35,31 @@
"tx": "TX пин",
"rx": "RX пин",
"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,
"usedLibs": {