//GPA start 0x00
//GPB start 0x01
//command input 0xFF
//command output 0x00
//when u start transaction
//call GPA is 0x12
//put high and low with 0 or 1 in 8 bit
//call GPA is 0x13
//put high and low with 0 or 1 in 8 bit
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define MCP23017 0x27
Adafruit_SSD1306 display(SCREEN_WIDTH,SCREEN_HEIGHT, &Wire);
bool stateISR = true;
unsigned long period = 1000;
unsigned long last_time = 0;
void setup() {
Serial.begin(115200);
Wire.begin();
//Open Port A
Wire.beginTransmission(MCP23017);
Wire.write(0x00); //address GPA
Wire.write(0x00); //output 0xFF is input
Wire.endTransmission();
//Open Port B
Wire.beginTransmission(MCP23017);
Wire.write(0x01); //address GPB
Wire.write(0x00); //output 0xFF is input
Wire.endTransmission();
//DISPLAY
if(!display.begin(SSD1306_SWITCHCAPVCC,0x3C))
{
Serial.println(F("SSD1306 allocation failed"));
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(F("ESP32 I2C MCP23017"));
display.display();
}
void show_led8()
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(F("ESP32 I2C MCP23017"));
display.setCursor(0,16);
display.println(F("LED8 = ON || LED9 = OFF"));
display.display();
}
void show_led9()
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(F("ESP32 I2C MCP23017"));
display.setCursor(0,16);
display.println(F("LED8 = OFF || LED9 = ON"));
display.display();
}
void led8_on()
{
Wire.beginTransmission(MCP23017);
Wire.write(0x12); //address GPA
Wire.write(0x80);
Wire.endTransmission();
}
void led8_off()
{
Wire.beginTransmission(MCP23017);
Wire.write(0x12); //address GPA
Wire.write(0x00);
Wire.endTransmission();
}
void led9_on()
{
Wire.beginTransmission(MCP23017);
Wire.write(0x13); //address GPB
Wire.write(0x01); //out port0
Wire.endTransmission();
}
void led9_off()
{
Wire.beginTransmission(MCP23017);
Wire.write(0x13); //address GPB
Wire.write(0x00); //out port0
Wire.endTransmission();
}
void loop() {
if(millis() - last_time >= period)
{
last_time = millis();
if(stateISR)
{
led8_on();
led9_off();
show_led8();
}
else
{
led9_on();
led8_off();
show_led9();
}
stateISR = !stateISR;
}
}