#include <SPI.h>
#include <Wire.h>
//address depend on state of A2 A1 A0
//A2 A1 A0 = 0 0 0 (Binary) → Address = 0x20
//A2 A1 A0 = 1 1 1 (Binary) → Address = 0x27
#define MCP23017 0x20
void setup() {
Wire.begin();
Wire.beginTransmission(MCP23017);
// address of the IODIRA register, which control port A
Wire.write(0x00);
// sets all pins of port A as outputs by writing a value of 0x00 to the IODIRA register.
Wire.write(0x00);
Wire.endTransmission();
delay(500);
Wire.begin();
Wire.beginTransmission(MCP23017);
// address of the IODIRA register, which control port B
Wire.write(0x01);
// sets all pins of port B as outputs by writing a value of 0x00 to the IODIRA register.
Wire.write(0x00);
Wire.endTransmission();
delay(500);
}
bool state = true;
unsigned long last_Millis = 0;
void loop() {
if(millis() - last_Millis >= 1000){
last_Millis = millis();
if(state == true) {
Wire.beginTransmission(MCP23017);
Wire.write(0x12); // GPIOA 0x12 LED8
Wire.write(0x00);
Wire.endTransmission();
Wire.beginTransmission(MCP23017);
Wire.write(0x13); // GPIOB 0x13 LED9
Wire.write(0xFF);
Wire.endTransmission();
}
else {
Wire.beginTransmission(MCP23017);
Wire.write(0x12);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(MCP23017);
Wire.write(0x13);
Wire.write(0x00);
Wire.endTransmission();
}
state = !state;
}
}