Conectar dos MCP23008 al bus I2C

Hola a todos; Soy nuevo en este foro, estoy empezando con el Arduino y debo reconocer que me supera.
Me quiero construir un control para un preamplficador. Es decir controlar el volumen con un encoder que activa 8 relés. Controlar las 5 entradas con otro encoder. Un pantalla TFT u Oled … y ya la monda con mando a distancia. He mirado lo que hay hecho pero aunqwue he visto gente que ha contruido un sistema así, el código no era público.

A ver la parte del volumen ya la tengo resuelta por medio de un MCP23008 conectado al bus I2C. El problema se me presenta al querer usar otro chip identico para controlar los relés de entrada, la libreria adafruit MCP23008 define la dirección del chip (A0=A1=A2=0) en el bus y claro, no tengo ni idea de como puedo colocar un segundo chip, salvo modificando la libreria, cosa que me supera.

Si alguien es capaz de añadir luz a mi mar de tinieblas se lo agradeceré

gracias

Fernando

Los dispositivos I2C son facilmente modificables

Esta librería MCP3008 no tiene opcion para cambiar la dirección

Según dice, si no pones nada usa la dirección por defecto y sino al inicializar le dices cual

#include <Wire.h>
#include "Adafruit_MCP23008.h"

// Basic pin reading and pullup test for the MCP23008 I/O expander
// public domain!

// Connect pin #1 of the expander to Analog 5 (i2c clock)
// Connect pin #2 of the expander to Analog 4 (i2c data)
// Connect pins #3, 4 and 5 of the expander to ground (address selection)
// Connect pin #6 and 18 of the expander to 5V (power and reset disable)
// Connect pin #9 of the expander to ground (common ground)

// Input #0 is on pin 10 so connect a button or switch from there to ground

Adafruit_MCP23008 mcp;
  
void setup() {  
  mcp.begin();      // use default address 0

  mcp.pinMode(0, INPUT);
  mcp.pullUp(0, HIGH);  // turn on a 100K pullup internally

  pinMode(13, OUTPUT);  // use the p13 LED as debugging
}



void loop() {
  // The LED will 'echo' the button
  digitalWrite(13, mcp.digitalRead(0));
}

si miras dice

mcp.begin();      // use default address 0

o sea que si pusieras un segundo dispositivo

mcp2.begin(1);  // estaria en direccion 1

Según me dices esto lo tengo que añadir en la libreria del MCP. Bueno voy a ver si soy capaz de modificarla. Ya te contaré.

Muchas gracias

No!!! Puedes hacerlo directamente creando un segundo objeto

Adafruit_MCP23008 mcp1; // el 1er MCP
Adafruit_MCP23008 mcp2; // el 2do MCP con las Address modificadas a 1

void setup() {  
  mcp1.begin(0);      // usa la dirección 0x20
  mcp2.begin(1);      // usa la dirección siguiente 0x21
}

Ah!! ahora si,
Gracias