#include #include #include RelayI2CMaster relayMaster(0x08); // Default address, can be changed via setAddress() void setup() { Serial.begin(115200); delay(1000); relayMaster.begin(); Serial.println("Enter:"); Serial.println(" s - to scan I2C bus"); Serial.println(" ch - to change slave address"); Serial.println(" - to set relay (e.g. 3 on)"); } void loop() { if (Serial.available()) { String input = Serial.readStringUntil('\n'); input.trim(); if (input == "s") { I2CMasterUtils::scanI2C(); } else if (input.startsWith("ch")) { uint8_t oldAddr, newAddr; if (I2CMasterUtils::parseChangeAddressCommand(input, oldAddr, newAddr)) { I2CMasterUtils::changeSlaveAddress(oldAddr, newAddr); relayMaster.setAddress(newAddr); // Update master's address Serial.print("Changed address to 0x"); Serial.println(newAddr, HEX); } else { Serial.println("Invalid command format. Use: ch "); } } else { int spaceIndex = input.indexOf(' '); if (spaceIndex > 0) { String relayStr = input.substring(0, spaceIndex); String stateStr = input.substring(spaceIndex + 1); int relayNum = relayStr.toInt(); bool state = false; stateStr.toLowerCase(); if (stateStr == "on") state = true; else if (stateStr == "off") state = false; else { Serial.println("Invalid state! Use 'on' or 'off'."); return; } if (relayNum >= 1 && relayNum <= 8) { relayMaster.setRelay(relayNum, state); Serial.print("Relay "); Serial.print(relayNum); Serial.print(" turned "); Serial.println(state ? "ON" : "OFF"); } else { Serial.println("Invalid relay number! Use 1-8."); } } else { Serial.println("Invalid command! Format: "); } } } }