4 hours ago
Code:
/*
Made by KinCony IoT: https://www.kincony.com
KC868-A128
DI1 -> DO1
DI2 -> DO2
...
DI128 -> DO128
IIC Bus-A for relay DO:
SDA = GPIO5
SCL = GPIO16
IIC Bus-B for DI:
SDA = GPIO15
SCL = GPIO4
*/
#include <Arduino.h>
#include <Wire.h>
#define DO_SDA 5
#define DO_SCL 16
#define DI_SDA 15
#define DI_SCL 4
// PCF8575 address order
uint8_t pcfAddr[8] = {
0x24, 0x25, 0x21, 0x22,
0x26, 0x27, 0x20, 0x23
};
// relay output state
// PCF8575: 1 = OFF, 0 = ON
uint16_t relayState[8];
uint16_t readPCF8575(TwoWire &wireBus, uint8_t addr) {
wireBus.requestFrom(addr, (uint8_t)2);
if (wireBus.available() < 2) {
return 0xFFFF;
}
uint8_t lowByte = wireBus.read();
uint8_t highByte = wireBus.read();
return ((uint16_t)highByte << 8) | lowByte;
}
void writePCF8575(TwoWire &wireBus, uint8_t addr, uint16_t value) {
wireBus.beginTransmission(addr);
wireBus.write(value & 0xFF);
wireBus.write((value >> 8) & 0xFF);
wireBus.endTransmission();
}
void setup() {
Serial.begin(115200);
delay(1000);
Wire.begin(DO_SDA, DO_SCL); // IIC Bus-A, relay
Wire1.begin(DI_SDA, DI_SCL); // IIC Bus-B, digital input
// Init all relays OFF
for (int i = 0; i < 8; i++) {
relayState[i] = 0xFFFF;
writePCF8575(Wire, pcfAddr[i], relayState[i]);
}
Serial.println("KC868-A128 DI trigger DO ready.");
}
void loop() {
for (int board = 0; board < 8; board++) {
uint16_t inputState = readPCF8575(Wire1, pcfAddr[board]);
// DI low active
// DI = 0 -> relay ON
// DI = 1 -> relay OFF
relayState[board] = inputState;
writePCF8575(Wire, pcfAddr[board], relayState[board]);
}
delay(50);
}
input-trigger-output.ino.merged.zip (Size: 183.82 KB / Downloads: 4)
YouTube: https://www.youtube.com/c/KinCony
Online Store: https://shop.kincony.com
Alibaba Store: https://kincony.en.alibaba.com/
Online Store: https://shop.kincony.com
Alibaba Store: https://kincony.en.alibaba.com/

