#include #include #include "I2CRelay.h" #include "I2CMasterUtils.h" #include "I2CCommands.h" I2CRelay::I2CRelay(uint8_t slaveAddress) : _slaveAddress(slaveAddress) {} void I2CRelay::setAddress(uint8_t newAddress) { _slaveAddress = newAddress; } void I2CRelay::begin() { Wire.begin(); } void I2CRelay::setRelay(uint8_t relayIndex, bool state) { Wire.beginTransmission(_slaveAddress); Wire.write(relayIndex); Wire.write(state ? 1 : 0); Wire.endTransmission(); } uint8_t I2CRelay::scanDevices(uint8_t* foundAddresses, uint8_t maxDevices) { uint8_t count = 0; for(uint8_t addr = 1; addr < 127; addr++) { Wire.beginTransmission(addr); if(Wire.endTransmission() == 0) { if(count < maxDevices) { foundAddresses[count++] = addr; } } } return count; }