Merge pull request #149 from biveraxe/ver4dev

Новые функции в сценарии и исправление LCD
This commit is contained in:
IoT Manager
2022-03-03 23:33:30 +01:00
committed by GitHub
7 changed files with 60 additions and 26 deletions

View File

@@ -11,6 +11,7 @@ class IoTGpio {
virtual int digitalRead(uint8_t pin); virtual int digitalRead(uint8_t pin);
virtual int analogRead(uint8_t pin); virtual int analogRead(uint8_t pin);
virtual void analogWrite(uint8_t pin, int val); virtual void analogWrite(uint8_t pin, int val);
virtual void digitalInvert(uint8_t pin);
int index; int index;
void regDriver(IoTGpio* newDriver); void regDriver(IoTGpio* newDriver);

View File

@@ -48,6 +48,12 @@ void IoTGpio::analogWrite(uint8_t pin, int val) {
} }
} }
void IoTGpio::digitalInvert(uint8_t pin) {
int pinH = pin/100;
if (_drivers[pinH]) _drivers[pinH]->digitalInvert(pin - pinH*100);
else ::digitalWrite(pin, 1 - ::digitalRead(pin));
}
void IoTGpio::regDriver(IoTGpio* newDriver) { void IoTGpio::regDriver(IoTGpio* newDriver) {
_drivers[newDriver->index] = newDriver; _drivers[newDriver->index] = newDriver;

View File

@@ -11,9 +11,9 @@ IoTItem::IoTItem(String parameters) {
_interval = _interval * 1000; _interval = _interval * 1000;
jsonRead(parameters, F("subtype"), _subtype); jsonRead(parameters, F("subtype"), _subtype);
jsonRead(parameters, F("id"), _id); jsonRead(parameters, F("id"), _id);
jsonRead(parameters, F("multiply"), _multiply, false); if (!jsonRead(parameters, F("multiply"), _multiply, false)) _multiply = 1;
jsonRead(parameters, F("plus"), _plus, false); if (!jsonRead(parameters, F("plus"), _plus, false)) _plus = 0;
jsonRead(parameters, F("round"), _round, false); if (!jsonRead(parameters, F("round"), _round, false)) _round = -1;
String valAsStr; String valAsStr;
if (jsonRead(parameters, F("val"), valAsStr, false)) // значение переменной или датчика при инициализации если есть в конфигурации if (jsonRead(parameters, F("val"), valAsStr, false)) // значение переменной или датчика при инициализации если есть в конфигурации
@@ -44,7 +44,11 @@ String IoTItem::getID() {
String IoTItem::getValue() { String IoTItem::getValue() {
if (value.isDecimal) if (value.isDecimal)
return (String)value.valD; if (_round >= 0) {
char buf[8];
sprintf(buf, ("%1." + (String)_round + "f").c_str(), value.valD);
return (String)buf;
} else return (String)value.valD;
else else
return value.valS; return value.valS;
} }
@@ -78,7 +82,7 @@ void IoTItem::regEvent(String value, String consoleInfo = "") {
void IoTItem::regEvent(float regvalue, String consoleInfo = "") { void IoTItem::regEvent(float regvalue, String consoleInfo = "") {
if (_multiply) regvalue = regvalue * _multiply; if (_multiply) regvalue = regvalue * _multiply;
if (_plus) regvalue = regvalue + _multiply; if (_plus) regvalue = regvalue + _multiply;
if (_round >= 0 && _round < 6) { if (_round >= 0 && _round <= 6) {
int sot = _round ? pow(10, (int)_round) : 1; int sot = _round ? pow(10, (int)_round) : 1;
regvalue = round(regvalue * sot) / sot; regvalue = round(regvalue * sot) / sot;
} }
@@ -86,12 +90,7 @@ void IoTItem::regEvent(float regvalue, String consoleInfo = "") {
value.valD = regvalue; value.valD = regvalue;
// убираем лишние нули regEvent(getValue(), consoleInfo);
// char buf[20];
// sprintf(buf, "%g", regvalue);
// regEvent((String)buf, consoleInfo);
regEvent((String)regvalue, consoleInfo);
} }
void IoTItem::doByInterval() {} void IoTItem::doByInterval() {}

View File

@@ -260,8 +260,12 @@ class IfExprAST : public ExprAST {
String _IDNames; String _IDNames;
public: public:
IfExprAST(ExprAST *cond, ExprAST *then, ExprAST *_else, String IDNames) IfExprAST(ExprAST *cond, ExprAST *then, ExprAST *_else, String *IDNames)
: Cond(cond), Then(then), Else(_else), _IDNames(IDNames) {} : Cond(cond), Then(then), Else(_else) {
if (IDNames) {
_IDNames = *IDNames;
} else _IDNames = "";
}
bool hasEventIdName(String eventIdName) { bool hasEventIdName(String eventIdName) {
Serial.printf("Call from BinaryExprAST _IDNames:%s\n", _IDNames.c_str()); Serial.printf("Call from BinaryExprAST _IDNames:%s\n", _IDNames.c_str());
@@ -547,10 +551,13 @@ public:
bracketsList.push_back(Expr); bracketsList.push_back(Expr);
if (CurTok != ';') if (CurTok != ';')
return Error("Expected '}' or ';' in operation list"); return Error("Expected ';' in operation list");
getNextToken(); int ttok = getNextToken();
if (!ttok) { Error("Expected '}'"); break; }
if (CurTok == '}') break; if (CurTok == '}') break;
} }
} }
@@ -579,7 +586,7 @@ public:
getNextToken(); // Получаем then getNextToken(); // Получаем then
ExprAST *Then = ParseExpression(nullptr); ExprAST *Then = ParseExpression(nullptr);
if (Then == 0) return 0; if (!Then) return 0;
//if (CurTok != tok_else) //if (CurTok != tok_else)
// return Error("expected else"); // return Error("expected else");
@@ -589,7 +596,7 @@ public:
Else = ParseExpression(nullptr); Else = ParseExpression(nullptr);
} }
return new IfExprAST(Cond, Then, Else, *IDNames); return new IfExprAST(Cond, Then, Else, IDNames);
} }
/// primary /// primary
@@ -646,7 +653,7 @@ public:
LHS = new BinaryExprAST(BinOp, LHS, RHS); LHS = new BinaryExprAST(BinOp, LHS, RHS);
} }
} }
/// expression /// expression
/// ::= primary binoprhs /// ::= primary binoprhs
@@ -682,7 +689,8 @@ public:
//case ';': getNextToken(); break; // игнорируем верхнеуровневые точки с запятой. //case ';': getNextToken(); break; // игнорируем верхнеуровневые точки с запятой.
case tok_if: { case tok_if: {
String IDNames = ""; // накопитель встречающихся идентификаторов в условии String IDNames = ""; // накопитель встречающихся идентификаторов в условии
ScenarioElements.push_back(ParseExpression(&IDNames)); ScenarioElements.push_back(ParseIfExpr(&IDNames));
//Serial.printf("vvvvvvvvvvvvvvvv %s", IDNames.c_str());
break; break;
} }
default: getNextToken(); break; default: getNextToken(); break;

View File

@@ -42,11 +42,10 @@ class Lcd2004 : public IoTItem {
void doByInterval() { void doByInterval() {
if (LCDI2C != nullptr) { if (LCDI2C != nullptr) {
printBlankStr(_prevStrSize); printBlankStr(_prevStrSize);
String tmpStr; String tmpStr = "";
// to do if (_descr != "none") tmpStr = _descr + " " + getItemValue(_id2show);
// jsonRead(paramsHeapJson, _id2show, tmpStr); else tmpStr = getItemValue(_id2show);
if (_descr != "none") tmpStr = _descr + " " + tmpStr;
LCDI2C->setCursor(_x, _y); LCDI2C->setCursor(_x, _y);
LCDI2C->print(tmpStr); LCDI2C->print(tmpStr);

View File

@@ -36,6 +36,10 @@ class Mcp23017 : public IoTItem, IoTGpio {
return mcp.digitalRead(pin); return mcp.digitalRead(pin);
} }
void digitalInvert(uint8_t pin) {
mcp.digitalWrite(pin, 1 - mcp.digitalRead(pin));
}
~Mcp23017() {}; ~Mcp23017() {};
}; };

View File

@@ -31,8 +31,25 @@ class SysExt : public IoTItem {
if (command == "reboot") { // выполняем код при вызове спец команды из сценария: ID.reboot(); if (command == "reboot") { // выполняем код при вызове спец команды из сценария: ID.reboot();
ESP.restart(); ESP.restart();
} else if (command == "digitalRead") {
if (param.size()) {
IoTgpio.pinMode(param[0].valD, INPUT);
value.valD = IoTgpio.digitalRead(param[0].valD);
return value;
}
} else if (command == "digitalWrite") {
if (param.size() == 2) {
IoTgpio.pinMode(param[0].valD, OUTPUT);
IoTgpio.digitalWrite(param[0].valD, param[1].valD);
return {};
}
} else if (command == "digitalInvert") {
if (param.size()) {
IoTgpio.pinMode(param[0].valD, OUTPUT);
IoTgpio.digitalInvert(param[0].valD);
return {};
}
} }
return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки
} }