diff --git a/include/utils/StringUtils.h b/include/utils/StringUtils.h index 5a1edc41..da9468cb 100644 --- a/include/utils/StringUtils.h +++ b/include/utils/StringUtils.h @@ -40,4 +40,4 @@ boolean isDigitDotCommaStr(const String& str); String prettyBytes(size_t size); -String uint64ToString(uint64_t input); +String uint64ToString(uint64_t input, uint8_t base = 10); diff --git a/src/modules/display/Lcd2004/Lcd2004.cpp b/src/modules/display/Lcd2004/Lcd2004.cpp index 74f3080d..968bed0b 100644 --- a/src/modules/display/Lcd2004/Lcd2004.cpp +++ b/src/modules/display/Lcd2004/Lcd2004.cpp @@ -15,16 +15,17 @@ class Lcd2004 : public IoTItem { String _id2show; String _descr; int _prevStrSize; + String _addr; bool _isShow = true; // экран показывает public: Lcd2004(String parameters) : IoTItem(parameters) { - String addr, size, xy; + String size, xy; _prevStrSize = 0; - jsonRead(parameters, "addr", addr); - if (addr == "") { + jsonRead(parameters, "addr", _addr); + if (_addr == "") { scanI2C(); return; } @@ -33,7 +34,7 @@ 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 LiquidCrystal_I2C(hexStringToUint8(_addr), w, h); if (LCDI2C != nullptr) { LCDI2C->init(); } @@ -62,6 +63,8 @@ class Lcd2004 : public IoTItem { //LCDI2C->print("Helloy,Manager 404 !"); //Serial.printf("ffff %s\n", _id2show); _prevStrSize = tmpStr.length(); + } else { + scanI2C(); } } diff --git a/src/modules/exec/Mcp23017/Mcp23017.cpp b/src/modules/exec/Mcp23017/Mcp23017.cpp index 657a3fde..b5fc7f06 100644 --- a/src/modules/exec/Mcp23017/Mcp23017.cpp +++ b/src/modules/exec/Mcp23017/Mcp23017.cpp @@ -3,8 +3,6 @@ #include "classes/IoTGpio.h" #include -void scanI2C(); - class Mcp23017Driver : public IoTGpio { private: Adafruit_MCP23X17 _mcp; @@ -39,14 +37,14 @@ class Mcp23017Driver : public IoTGpio { class Mcp23017 : public IoTItem { private: Mcp23017Driver* _driver; + String _addr; public: Mcp23017(String parameters) : IoTItem(parameters) { _driver = nullptr; - String addr; - jsonRead(parameters, "addr", addr); - if (addr == "") { + jsonRead(parameters, "addr", _addr); + if (_addr == "") { scanI2C(); return; } @@ -58,10 +56,15 @@ class Mcp23017 : public IoTItem { return; } - _driver = new Mcp23017Driver(index, addr); + _driver = new Mcp23017Driver(index, _addr); } - void doByInterval() {} + void doByInterval() { + if (_addr == "") { + scanI2C(); + return; + } + } //возвращает ссылку на экземпляр класса Mcp23017Driver IoTGpio* getGpioDriver() { diff --git a/src/modules/exec/Pcf8574/Pcf8574.cpp b/src/modules/exec/Pcf8574/Pcf8574.cpp index d5403752..962feea5 100644 --- a/src/modules/exec/Pcf8574/Pcf8574.cpp +++ b/src/modules/exec/Pcf8574/Pcf8574.cpp @@ -93,14 +93,14 @@ class Pcf8574Driver : public IoTGpio { class Pcf8574 : public IoTItem { private: Pcf8574Driver* _driver; + String _addr; public: Pcf8574(String parameters) : IoTItem(parameters) { _driver = nullptr; - String addr; - jsonRead(parameters, "addr", addr); - if (addr == "") { + jsonRead(parameters, "addr", _addr); + if (_addr == "") { scanI2C(); return; } @@ -112,10 +112,15 @@ class Pcf8574 : public IoTItem { return; } - _driver = new Pcf8574Driver(index, addr); + _driver = new Pcf8574Driver(index, _addr); } - void doByInterval() {} + void doByInterval() { + if (_addr == "") { + scanI2C(); + return; + } + } //возвращает ссылку на экземпляр класса Pcf8574Driver IoTGpio* getGpioDriver() { diff --git a/src/utils/I2CUtils.cpp b/src/utils/I2CUtils.cpp index 9d3f9032..a8c643c6 100644 --- a/src/utils/I2CUtils.cpp +++ b/src/utils/I2CUtils.cpp @@ -4,32 +4,29 @@ void scanI2C() { byte error, address; int nDevices; - - Serial.println("Scanning..."); + String message = ""; nDevices = 0; - for(address = 8; address < 127; address++ ){ + for(address = 8; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0){ - Serial.print("I2C device found at address 0x"); - if (address<16) - Serial.print("0"); - Serial.print(address,HEX); - Serial.println(" !"); + message += "I2C device found at address 0x"; + message += uint64ToString(address, 16); + message += " !"; nDevices++; } else if (error==4) { - Serial.print("Unknow error at address 0x"); - if (address<16) - Serial.print("0"); - Serial.println(address,HEX); + message += "Unknow error at address 0x"; + message += uint64ToString(address, 16); } } if (nDevices == 0) - Serial.println("No I2C devices found\n"); + message += "No I2C devices found\n"; else - Serial.println("done\n"); + message += "done\n"; + + SerialPrint("i", "I2C Scaner", message); } \ No newline at end of file diff --git a/src/utils/StringUtils.cpp b/src/utils/StringUtils.cpp index 0a2b06ac..a8d4ee3b 100644 --- a/src/utils/StringUtils.cpp +++ b/src/utils/StringUtils.cpp @@ -183,9 +183,8 @@ String prettyBytes(size_t size) { return String(size / 1024.0 / 1024.0 / 1024.0) + "GB"; } -String uint64ToString(uint64_t input) { +String uint64ToString(uint64_t input, uint8_t base) { String result = ""; - uint8_t base = 10; do { char c = input % base;