Merge pull request #210 from biveraxe/ver4dev

Делаем поиск адреса I2C устройств более удобным
This commit is contained in:
2022-10-10 22:55:57 +03:00
committed by GitHub
6 changed files with 40 additions and 33 deletions

View File

@@ -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);

View File

@@ -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();
}
}

View File

@@ -3,8 +3,6 @@
#include "classes/IoTGpio.h"
#include <Adafruit_MCP23X17.h>
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() {

View File

@@ -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() {

View File

@@ -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);
}

View File

@@ -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;