mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
Merge pull request #210 from biveraxe/ver4dev
Делаем поиск адреса I2C устройств более удобным
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user