Comunicação de bytes em I2C entre Arduinos – Código teste para o Arduino Master
Este programa já tem a base de código para processar os tipos byte, int, long e double.
i2c_master_mod_v1
/* * I2C comunication demo 1 * * I2C master * * Send a byte (0-255) send a byte to slave * */ #define serialSpeed 115200 #include <Wire.h> // slaves i2c address byte i2cSlave[1] = {7}; // I2C byte conversion union u_tag { byte b[4]; int i[2]; double d; long l; }; union u_tag i2c_data[1][16]; void setup() { Serial.begin(serialSpeed); // start serial for output while (!Serial); Wire.begin(); // join i2c bus (address optional for master) Wire.setClock(400000); // 400kHz clock. Comment if having compilation difficulties } void loop() { static byte b = 0; Wire.beginTransmission(i2cSlave[0]); Wire.write(b); Wire.endTransmission(); b++; getSlavesUpdate(); Serial.print(i2c_data[0][0].b[0]); Serial.print("\t"); Serial.println(""); delay(20); } void getSlavesUpdate() { // global union u_tag i2c_data[][]; byte i2c_byte[32]; int i; // master reader (first loop data request) for(i=0; i < 32; i++) { i2c_byte[i] = 0; } i = 0; Wire.requestFrom((int)i2cSlave[0], 2); // request 6 bytes from slave device #8 while (Wire.available()) { // slave may send less than requested char c = Wire.read(); // receive a byte as character i2c_byte[i] = c; i++; } for(i=0; i < 8; i++) { i2c_data[0][i].b[0] = i2c_byte[i*4 + 0]; i2c_data[0][i].b[1] = i2c_byte[i*4 + 1]; i2c_data[0][i].b[2] = i2c_byte[i*4 + 2]; i2c_data[0][i].b[3] = i2c_byte[i*4 + 3]; } }
Usar no slave o programa no seguinte link:
Comunicação de bytes em I2C entre Arduinos – Código teste para o Arduino Slave