66 lines
2.3 KiB
C++
66 lines
2.3 KiB
C++
#include <Wire.h>
|
|
#include <I2CRelay.h>
|
|
#include <I2CMasterUtils.h>
|
|
|
|
I2CRelay 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 <old> <new> - to change slave address");
|
|
Serial.println(" <relay> <on/off> - 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 <old_addr> <new_addr>");
|
|
}
|
|
} 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: <relay_number> <on/off>");
|
|
}
|
|
}
|
|
}
|
|
}
|