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