37 lines
1.1 KiB
C++
37 lines
1.1 KiB
C++
#include "I2CMasterUtils.h"
|
|
#include "I2CCommands.h"
|
|
|
|
void I2CMasterUtils::scanI2C(Stream &output) {
|
|
output.println("Scanning for I2C devices...");
|
|
for (uint8_t addr = 1; addr < 127; addr++) {
|
|
Wire.beginTransmission(addr);
|
|
if (Wire.endTransmission() == 0) {
|
|
output.print("Found device at 0x");
|
|
output.println(addr, HEX);
|
|
}
|
|
}
|
|
}
|
|
|
|
void I2CMasterUtils::changeSlaveAddress(uint8_t oldAddr, uint8_t newAddr, Stream &output) {
|
|
Wire.beginTransmission(oldAddr);
|
|
Wire.write(0xAA); // Command code for address change
|
|
Wire.write(newAddr);
|
|
Wire.endTransmission();
|
|
output.print("Sent address change command to 0x");
|
|
output.print(oldAddr, HEX);
|
|
output.print(" -> 0x");
|
|
output.println(newAddr, HEX);
|
|
}
|
|
|
|
bool I2CMasterUtils::parseChangeAddressCommand(const String &input, uint8_t &oldAddr, uint8_t &newAddr) {
|
|
if (!input.startsWith("ch")) return false;
|
|
int o, n;
|
|
int matched = sscanf(input.c_str(), "ch %x %x", &o, &n);
|
|
if (matched == 2) {
|
|
oldAddr = (uint8_t)o;
|
|
newAddr = (uint8_t)n;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|