Comunicação entre Arduinos numa configuração i2c multimaster estavel quando não existem mais dispositivos no bus.
Este é um programa exemplo da implementação da comunicação i2c entre arduinos em que ambos são master.
Esta solução funciona bem se não existir outros dispositivos slaves no bus.
Este é o primeiro de 3 programas que exploraram o uso do interface i2c com mais que um Arduino master, e contém a logica basica para as comunicações funcionarem.
i2c_multimaster_mod1_v1
#include <Wire.h>
#define I2C_SLAVE_ADDR 0x2
#define I2C_NODE_ADDR 0x1
void setup() {
Serial.begin(115200);
Wire.begin(I2C_NODE_ADDR);
Wire.onReceive(onReceiveFunc);
}
void loop() {
delay(5000);
Wire.beginTransmission(I2C_SLAVE_ADDR);
Wire.write("Hello ");
Wire.write(I2C_SLAVE_ADDR + 48);
Wire.write(" From ");
Wire.write(I2C_NODE_ADDR + 48);
Wire.endTransmission();
}
void onReceiveFunc(int howMany) {
while (Wire.available() > 0) {
char c = Wire.read();
Serial.print(c);
}
Serial.println();
}
O programa é o mesmo para todos os arduinos, só muda os endereços i2C de cada um, e portanto também o do slave correspondente.
Arduino 1 – Master
#define I2C_SLAVE_ADDR 0x2 #define I2C_NODE_ADDR 0x1
Arduino 2 – Master
#define I2C_SLAVE_ADDR 0x´1 #define I2C_NODE_ADDR 0x2
