Comunicação multimaster i2c entre Arduinos – Programa 1

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