Hello,
For my kid's simulator cockpit project (many buttons and many leds), I tried to use multiple Sparkfun I/O Expander. (SX1509 I/O Expander Breakout Hookup Guide - SparkFun Learn)

With the code below, I tried to test by using 2 I/O Expanders and many leds.
=> The I2C test message for "begin" for each I/O Exoander are correct.
So they were detected by the arduino.
=> But only one of two Expander is in function.
According to me, in the code below I didn't affect pins to the good I2C adress and the I/O expander weren't correctly begun.
At this point of my exploration (internet, documentations,...) I can't figure out how to affect Pin mode to another I2C adress.
=> Is someone can help me?
Thanks by advance.
//////////////////////////////////////
#include <Wire.h> // Include the I2C library (required)
#include <SparkFunSX1509.h> // Include SX1509 library
#include <SoftwareSerial.h>
SX1509 io; // Create an SX1509 object
// Pins for the 1st I/O Expander at adress 0x3E
const int SX1509_0x3E_PIN0 = 0;
const int SX1509_0x3E_PIN1 = 1;
const int SX1509_0x3E_PIN2 = 2;
const int SX1509_0x3E_PIN3 = 3;
const int SX1509_0x3E_PIN4 = 4;
const int SX1509_0x3E_PIN5 = 5;
const int SX1509_0x3E_PIN6 = 6;
const int SX1509_0x3E_PIN7 = 7;
const int SX1509_0x3E_PIN8 = 8;
const int SX1509_0x3E_PIN9 = 9;
const int SX1509_0x3E_PIN10 = 10;
const int SX1509_0x3E_PIN11 = 11;
const int SX1509_0x3E_PIN12 = 12;
const int SX1509_0x3E_PIN13 = 13;
const int SX1509_0x3E_PIN14 = 14;
const int SX1509_0x3E_PIN15 = 15;
// Pins for the 2nd I/O Expander at adress 0x3F
const int SX1509_0x3F_PIN0 = 0;
const int SX1509_0x3F_PIN1 = 1;
const int SX1509_0x3F_PIN2 = 2;
const int SX1509_0x3F_PIN3 = 3;
const int SX1509_0x3F_PIN4 = 4;
const int SX1509_0x3F_PIN5 = 5;
const int SX1509_0x3F_PIN6 = 6;
const int SX1509_0x3F_PIN7 = 7;
const int SX1509_0x3F_PIN8 = 8;
const int SX1509_0x3F_PIN9 = 9;
const int SX1509_0x3F_PIN10 = 10;
const int SX1509_0x3F_PIN11 = 11;
const int SX1509_0x3F_PIN12 = 12;
const int SX1509_0x3F_PIN13 = 13;
const int SX1509_0x3F_PIN14 = 14;
const int SX1509_0x3F_PIN15 = 15;
void setup()
{
Serial.begin(9600);
Wire.begin();
pinMode(13, OUTPUT); // Use pin 13 LED as debug output
digitalWrite(13, LOW); // Start it as low
// Call io.begin(<I2C address>) to initialize the I/O expander.
if (!io.begin(0x3E)) {
Serial.println("0x3E undetected");
}
if (io.begin (0x3E)) {
Serial.println("0x3E OK");
}
/////////////////////////
if (!io.begin(0x3F)) {
Serial.println("0x3F undetected");
}
if (io.begin (0x3F)) {
Serial.println("0x3F OK");
}
// Pinmode for the 1st I/O Expander at adress 0x3E
io.pinMode(SX1509_0x3E_PIN0, OUTPUT);
io.pinMode(SX1509_0x3E_PIN1, OUTPUT);
io.pinMode(SX1509_0x3E_PIN2, OUTPUT);
io.pinMode(SX1509_0x3E_PIN3, OUTPUT);
io.pinMode(SX1509_0x3E_PIN4, OUTPUT);
io.pinMode(SX1509_0x3E_PIN5, OUTPUT);
io.pinMode(SX1509_0x3E_PIN6, OUTPUT);
io.pinMode(SX1509_0x3E_PIN7, OUTPUT);
io.pinMode(SX1509_0x3E_PIN8, OUTPUT);
io.pinMode(SX1509_0x3E_PIN9, OUTPUT);
io.pinMode(SX1509_0x3E_PIN10, OUTPUT);
io.pinMode(SX1509_0x3E_PIN11, OUTPUT);
io.pinMode(SX1509_0x3E_PIN12, OUTPUT);
io.pinMode(SX1509_0x3E_PIN13, OUTPUT);
io.pinMode(SX1509_0x3E_PIN14, OUTPUT);
io.pinMode(SX1509_0x3E_PIN15, OUTPUT);
// pinmode for the 2nd I/O Expander at adress 0x3F
io.pinMode(SX1509_0x3F_PIN0, OUTPUT);
io.pinMode(SX1509_0x3F_PIN1, OUTPUT);
io.pinMode(SX1509_0x3F_PIN2, OUTPUT);
io.pinMode(SX1509_0x3F_PIN3, OUTPUT);
io.pinMode(SX1509_0x3F_PIN4, OUTPUT);
io.pinMode(SX1509_0x3F_PIN5, OUTPUT);
io.pinMode(SX1509_0x3F_PIN6, OUTPUT);
io.pinMode(SX1509_0x3F_PIN7, OUTPUT);
io.pinMode(SX1509_0x3F_PIN8, OUTPUT);
io.pinMode(SX1509_0x3F_PIN9, OUTPUT);
io.pinMode(SX1509_0x3F_PIN10, OUTPUT);
io.pinMode(SX1509_0x3F_PIN11, OUTPUT);
io.pinMode(SX1509_0x3F_PIN12, OUTPUT);
io.pinMode(SX1509_0x3F_PIN13, OUTPUT);
io.pinMode(SX1509_0x3F_PIN14, OUTPUT);
io.pinMode(SX1509_0x3F_PIN15, OUTPUT);
}
void loop()
{
// Light main test led
digitalWrite(13, HIGH);
// Light all Led on 1st I/O Expander at adress 0x3E
io.digitalWrite(SX1509_0x3E_PIN1, HIGH);
io.digitalWrite(SX1509_0x3E_PIN2, HIGH);
io.digitalWrite(SX1509_0x3E_PIN3, HIGH);
io.digitalWrite(SX1509_0x3E_PIN4, HIGH);
io.digitalWrite(SX1509_0x3E_PIN5, HIGH);
io.digitalWrite(SX1509_0x3E_PIN6, HIGH);
io.digitalWrite(SX1509_0x3E_PIN7, HIGH);
io.digitalWrite(SX1509_0x3E_PIN8, HIGH);
io.digitalWrite(SX1509_0x3E_PIN9, HIGH);
io.digitalWrite(SX1509_0x3E_PIN10, HIGH);
io.digitalWrite(SX1509_0x3E_PIN11, HIGH);
io.digitalWrite(SX1509_0x3E_PIN12, HIGH);
io.digitalWrite(SX1509_0x3E_PIN13, HIGH);
io.digitalWrite(SX1509_0x3E_PIN14, HIGH);
io.digitalWrite(SX1509_0x3E_PIN15, HIGH);
// Light all Led on 2nd I/O Expander at adress 0x3F
io.digitalWrite(SX1509_0x3F_PIN0, HIGH);
io.digitalWrite(SX1509_0x3F_PIN1, HIGH);
io.digitalWrite(SX1509_0x3F_PIN2, HIGH);
io.digitalWrite(SX1509_0x3F_PIN3, HIGH);
io.digitalWrite(SX1509_0x3F_PIN4, HIGH);
io.digitalWrite(SX1509_0x3F_PIN5, HIGH);
io.digitalWrite(SX1509_0x3F_PIN6, HIGH);
io.digitalWrite(SX1509_0x3F_PIN7, HIGH);
io.digitalWrite(SX1509_0x3F_PIN8, HIGH);
io.digitalWrite(SX1509_0x3F_PIN9, HIGH);
io.digitalWrite(SX1509_0x3F_PIN10, HIGH);
io.digitalWrite(SX1509_0x3F_PIN11, HIGH);
io.digitalWrite(SX1509_0x3F_PIN12, HIGH);
io.digitalWrite(SX1509_0x3F_PIN13, HIGH);
io.digitalWrite(SX1509_0x3F_PIN14, HIGH);
io.digitalWrite(SX1509_0x3F_PIN15, HIGH);
delay(500);
// Unlight main test led
digitalWrite(13, LOW);
// Unlight all Led on 1st I/O Expander at adress 0x3E
io.digitalWrite(SX1509_0x3E_PIN0, LOW);
io.digitalWrite(SX1509_0x3E_PIN1, LOW);
io.digitalWrite(SX1509_0x3E_PIN2, LOW);
io.digitalWrite(SX1509_0x3E_PIN3, LOW);
io.digitalWrite(SX1509_0x3E_PIN4, LOW);
io.digitalWrite(SX1509_0x3E_PIN5, LOW);
io.digitalWrite(SX1509_0x3E_PIN6, LOW);
io.digitalWrite(SX1509_0x3E_PIN7, LOW);
io.digitalWrite(SX1509_0x3E_PIN8, LOW);
io.digitalWrite(SX1509_0x3E_PIN9, LOW);
io.digitalWrite(SX1509_0x3E_PIN10, LOW);
io.digitalWrite(SX1509_0x3E_PIN11, LOW);
io.digitalWrite(SX1509_0x3E_PIN12, LOW);
io.digitalWrite(SX1509_0x3E_PIN13, LOW);
io.digitalWrite(SX1509_0x3E_PIN14, LOW);
io.digitalWrite(SX1509_0x3E_PIN15, LOW);
// Unlight all Led on 2nd I/O Expander at adress 0x3F
io.digitalWrite(SX1509_0x3F_PIN1, LOW);
io.digitalWrite(SX1509_0x3F_PIN2, LOW);
io.digitalWrite(SX1509_0x3F_PIN3, LOW);
io.digitalWrite(SX1509_0x3F_PIN4, LOW);
io.digitalWrite(SX1509_0x3F_PIN5, LOW);
io.digitalWrite(SX1509_0x3F_PIN6, LOW);
io.digitalWrite(SX1509_0x3F_PIN7, LOW);
io.digitalWrite(SX1509_0x3F_PIN8, LOW);
io.digitalWrite(SX1509_0x3F_PIN9, LOW);
io.digitalWrite(SX1509_0x3F_PIN10, LOW);
io.digitalWrite(SX1509_0x3F_PIN11, LOW);
io.digitalWrite(SX1509_0x3F_PIN12, LOW);
io.digitalWrite(SX1509_0x3F_PIN13, LOW);
io.digitalWrite(SX1509_0x3F_PIN14, LOW);
io.digitalWrite(SX1509_0x3F_PIN15, LOW);
delay(500);
}