Делаем поиск адреса I2C более удобным

This commit is contained in:
2022-10-10 22:54:44 +03:00
parent 0553503e1c
commit cc28b45851
3 changed files with 27 additions and 16 deletions

View File

@@ -15,16 +15,17 @@ class Lcd2004 : public IoTItem {
String _id2show; String _id2show;
String _descr; String _descr;
int _prevStrSize; int _prevStrSize;
String _addr;
bool _isShow = true; // экран показывает bool _isShow = true; // экран показывает
public: public:
Lcd2004(String parameters) : IoTItem(parameters) { Lcd2004(String parameters) : IoTItem(parameters) {
String addr, size, xy; String size, xy;
_prevStrSize = 0; _prevStrSize = 0;
jsonRead(parameters, "addr", addr); jsonRead(parameters, "addr", _addr);
if (addr == "") { if (_addr == "") {
scanI2C(); scanI2C();
return; return;
} }
@@ -33,7 +34,7 @@ class Lcd2004 : public IoTItem {
int w = selectFromMarkerToMarker(size, ",", 0).toInt(); //количество столбцов int w = selectFromMarkerToMarker(size, ",", 0).toInt(); //количество столбцов
int h = selectFromMarkerToMarker(size, ",", 1).toInt(); //количество строк int h = selectFromMarkerToMarker(size, ",", 1).toInt(); //количество строк
if (LCDI2C == nullptr) { //инициализации экрана еще не было if (LCDI2C == nullptr) { //инициализации экрана еще не было
LCDI2C = new LiquidCrystal_I2C(hexStringToUint8(addr), w, h); LCDI2C = new LiquidCrystal_I2C(hexStringToUint8(_addr), w, h);
if (LCDI2C != nullptr) { if (LCDI2C != nullptr) {
LCDI2C->init(); LCDI2C->init();
} }
@@ -62,6 +63,8 @@ class Lcd2004 : public IoTItem {
//LCDI2C->print("Helloy,Manager 404 !"); //LCDI2C->print("Helloy,Manager 404 !");
//Serial.printf("ffff %s\n", _id2show); //Serial.printf("ffff %s\n", _id2show);
_prevStrSize = tmpStr.length(); _prevStrSize = tmpStr.length();
} else {
scanI2C();
} }
} }

View File

@@ -3,8 +3,6 @@
#include "classes/IoTGpio.h" #include "classes/IoTGpio.h"
#include <Adafruit_MCP23X17.h> #include <Adafruit_MCP23X17.h>
void scanI2C();
class Mcp23017Driver : public IoTGpio { class Mcp23017Driver : public IoTGpio {
private: private:
Adafruit_MCP23X17 _mcp; Adafruit_MCP23X17 _mcp;
@@ -39,14 +37,14 @@ class Mcp23017Driver : public IoTGpio {
class Mcp23017 : public IoTItem { class Mcp23017 : public IoTItem {
private: private:
Mcp23017Driver* _driver; Mcp23017Driver* _driver;
String _addr;
public: public:
Mcp23017(String parameters) : IoTItem(parameters) { Mcp23017(String parameters) : IoTItem(parameters) {
_driver = nullptr; _driver = nullptr;
String addr; jsonRead(parameters, "addr", _addr);
jsonRead(parameters, "addr", addr); if (_addr == "") {
if (addr == "") {
scanI2C(); scanI2C();
return; return;
} }
@@ -58,10 +56,15 @@ class Mcp23017 : public IoTItem {
return; return;
} }
_driver = new Mcp23017Driver(index, addr); _driver = new Mcp23017Driver(index, _addr);
} }
void doByInterval() {} void doByInterval() {
if (_addr == "") {
scanI2C();
return;
}
}
//возвращает ссылку на экземпляр класса Mcp23017Driver //возвращает ссылку на экземпляр класса Mcp23017Driver
IoTGpio* getGpioDriver() { IoTGpio* getGpioDriver() {

View File

@@ -93,14 +93,14 @@ class Pcf8574Driver : public IoTGpio {
class Pcf8574 : public IoTItem { class Pcf8574 : public IoTItem {
private: private:
Pcf8574Driver* _driver; Pcf8574Driver* _driver;
String _addr;
public: public:
Pcf8574(String parameters) : IoTItem(parameters) { Pcf8574(String parameters) : IoTItem(parameters) {
_driver = nullptr; _driver = nullptr;
String addr; jsonRead(parameters, "addr", _addr);
jsonRead(parameters, "addr", addr); if (_addr == "") {
if (addr == "") {
scanI2C(); scanI2C();
return; return;
} }
@@ -112,10 +112,15 @@ class Pcf8574 : public IoTItem {
return; return;
} }
_driver = new Pcf8574Driver(index, addr); _driver = new Pcf8574Driver(index, _addr);
} }
void doByInterval() {} void doByInterval() {
if (_addr == "") {
scanI2C();
return;
}
}
//возвращает ссылку на экземпляр класса Pcf8574Driver //возвращает ссылку на экземпляр класса Pcf8574Driver
IoTGpio* getGpioDriver() { IoTGpio* getGpioDriver() {