// MCP23017 I/O test #include #include LiquidCrystal_I2C lcd(0x27,16,2); Adafruit_MCP23X17 mcp; int inputData; int outputData; int cnt; boolean x; void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("COSMOLIGHT"); lcd.setCursor(0, 1); lcd.print("Project Arduino"); mcp.begin_I2C(0x20); // GPA0~7を出力に設定 for (int i = 0; i <= 7; i++) { mcp.pinMode(i, OUTPUT); } // GPB0~7を入力に設定 for (int i = 8; i <= 15; i++) { mcp.pinMode(i, INPUT); } delay(3000); cnt = 0; } void lcdDisp(void) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("SW data"); lcd.setCursor(0, 1); lcd.print(String(outputData, BIN)); } void loop(){ byte inputData = 0; // GPB0~7の状態をGPA0~7へ出力 for (int i = 8; i <= 15; i++) { x = mcp.digitalRead(i); mcp.digitalWrite(i - 8, x); inputData = inputData | (x << (i - 8)); } outputData = ~inputData; if (cnt > 5) { lcdDisp(); cnt = 0; outputData = 0; } cnt++; delay(200); }