MCP23017はI2Cで接続することができる。とりあえず動かすためには次のようなプログラムでいい。
このプログラムを使えば入力、内部プルアップで動作し、シリアル通信で結果が送られてくる。
#include <Wire.h>
int DEVICE_ADDRESS_1 = 0x20;
uint8_t U1_PA;
uint8_t U1_PB;
void setup() {
Serial.begin(115200);
Wire.begin();
wrt_reg( DEVICE_ADDRESS_1 , 0x00 , 0xFF );
wrt_reg( DEVICE_ADDRESS_1 , 0x01 , 0xFF );
wrt_reg( DEVICE_ADDRESS_1 , 0x0C , 0xFF );
wrt_reg( DEVICE_ADDRESS_1 , 0x0D , 0xFF );
}
void loop() {
U1_PA = read_reg( DEVICE_ADDRESS_1 , 0x12 );
U1_PB = read_reg( DEVICE_ADDRESS_1 , 0x13 );
Serial.print(U1_PA);
Serial.print(',');
Serial.println(U1_PB);
delay(500);
}
void wrt_reg(int dvc_adrs , uint8_t reg , uint8_t value) {
Wire.beginTransmission(dvc_adrs);
Wire.write(reg);
Wire.write(value);
Wire.endTransmission();
}
uint8_t read_reg(int dvc_adrs , uint8_t reg) {
Wire.beginTransmission(dvc_adrs);
Wire.write(reg);
Wire.endTransmission(false);
Wire.requestFrom(dvc_adrs , 1);
if (! Wire.available()) return -1;
return (Wire.read());
}
コメント