Es que no la vas a encontrar porque no es posible.
Como te respondí, la topología de la comunicación I2C requiere un maestro y sus esclavos.
Si podrías hacer eso.. que el segundo maestro esté como esclavo esperando la orden para tomar el control y entonces el primero se desconecte y ceda el control al 2do y viceverza.
No he visto como hacerlo pero no me parece dificil.
Lo que no comprendo de tu idea es que un Arduino Maestro por X razón tendra datos digamos malos o equivocados y debe ceder la decisión a otro Arduino. Cual es el problema en manterner la topología tal como está y enviar todos los datos al Arduino Secundario y que este resuelva las cosas?
Complemento mi respuesta luego de informarme debidamente al respecto.
Parece ser que no hay problema alguno en tener MULTIPLES MAESTROS
para resumirlo prueba este código a ver como se comporta en tu enfoque
**
* Implementación ejemplo MULTI MAestro I2C. Envia el estado de un botón a otro
* Arduino, que flashea un led correspondiente al estado del botón.
*
* Conexiones: Arduino pin A4 y A5 conectados entre dos Arduinos,
* con un resistor pull-up de 1k conectados en cada línea. Conectar un botón pulsador entre
* pin 10 and ground, y un LED (con un resistor 330 o 470 ohms) al pin 9.
*/
#include <Wire.h>
#define LED 9
#define BOTON 10
#define ESTA_DIRECCION 0x8
#define OTRA_DIRECCION 0x9
bool estadoAnt = HIGH;
void setup() {
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
pinMode(BUTTON, INPUT);
digitalWrite(BUTTON, HIGH);
Wire.begin(ESTA_DIRECCION);
Wire.onReceive(receiveEvent);
}
void loop() {
if (digitalRead(BOTON) != estadoAnt){
last_state = digitalRead(BOTON);
Wire.beginTransmission(OTRA_DIRECCION);
Wire.send(estadoAnt);
Wire.endTransmission();
}
}
void receiveEvent(int valor){
while (Wire.available() > 0){
bool b = Wire.receive();
Serial.print(b, DEC);
digitalWrite(LED, !b);
}
Serial.println();
}
espero comentarios