#include <Wire.h>
// PCF8575 的 I2C 位址,通常是 0x20(取決於 A0、A1、A2 的接線)
#define PCF8575_ADDRESS 0x20
// 用來儲存目前 GPIO 的狀態(16 位元,表示 16 個引腳)
unsigned int gpioState = 0x0000; // 初始化為全部 LOW (未啟動)
void setup() {
Wire.begin(); // 啟動 I2C 通訊
}
void loop() {
// 範例:將 LED 逐一點亮
for (int i = 0; i < 16; i++) {
PCF8575Write(i, HIGH); // 點亮第 i 顆 LED
delay(100);
}
}
// 模擬 Arduino 的 digitalWrite 函式
void PCF8575Write(uint8_t pin, uint8_t state) {
if (pin < 0 || pin > 15) return; // 引腳號碼超過範圍,直接返回
// 首先將所有引腳設為 LOW
gpioState = 0x0000;
if (state == HIGH) {
gpioState |= (1 << pin); // 只將對應引腳位置為 HIGH
}
// 將更新後的狀態寫入 PCF8575
Wire.beginTransmission(PCF8575_ADDRESS);
Wire.write(gpioState & 0xFF); // 寫入低 8 位
Wire.write((gpioState >> 8) & 0xFF); // 寫入高 8 位
Wire.endTransmission();
}