#include #include #include #include #include #include #include #define I2C_DEVICE "/dev/i2c-1" #define DIO016RC_ADDRESS 0x24 // レジスタ enum PCA9535_Register { PCA9535_Reg_InputPort0, PCA9535_Reg_InputPort1, PCA9535_Reg_OutputPort0, PCA9535_Reg_OutputPort1, PCA9535_Reg_PolarityInversionPort0, PCA9535_Reg_PolarityInversionPort1, PCA9535_Reg_ConfigurationPort0, PCA9535_Reg_ConfigurationPort1, }; // 初期化 int DIO016RC_Init(int fd) { if (ioctl(fd, I2C_SLAVE, DIO016RC_ADDRESS) < 0) { perror("DIO016RC_Init(ioctl)"); return 1; } // ポート設定 uint8_t reg[3]; reg[0] = PCA9535_Reg_ConfigurationPort0; reg[1] = 0x00; reg[2] = 0x00; if ((write(fd, reg, 3)) != 3) { perror("DIO016RC_Init(write)"); return 1; } return 0; } // デジタル出力 int DIO016RC_Output(int fd, uint16_t value) { uint8_t reg[] = { PCA9535_Reg_OutputPort0, (uint8_t)(~value & 0xff), (uint8_t)((~value >> 8) & 0xff) }; if ((write(fd, reg, 3)) != 3) { perror("DIO016RC_Output(write)"); return 1; } return 0; } int main(int argc, char **argv) { int fd; if ((fd = open(I2C_DEVICE, O_RDWR)) < 0) { perror("open"); exit(1); } if (DIO016RC_Init(fd) != 0) exit(1); // デジタル出力 // (例)OUT15, 13, 2, 0をオン if (DIO016RC_Output(fd, 0xa005) != 0) exit(1); close(fd); return 0; }