#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(CMD_CHANGE_ADDR); // Use the command code from I2CCommands.h 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; }