Trasmettere e ricevere più byte con I2C tra 2 Arduino UNO

Salve a tutti ragazzi, mi sono cimentato nel fare diverse prove di trasmissione e ricezione di diversi byte con il protocollo I2C tra due Arduino Uno. Girovagando su internet sono riuscito a trovare una sola guida che mi ha dettagliatamente spiegato come trasferire diversi byte dal Mater allo Slave e fin qui tutto bene (il trasferimento dati avviene alla perfezione); ora il mio problema è che non riesco a richiedere e a ricevere dallo Slave più di un byte; ho provato in tutti i modi che mi venivano in mente ma riesco a ricevere solo l’ultimo byte tutti gli altri li perdo. posto i sketch del master e dello slave cosi spero possiate capire meglio il problema:

//MASTER
#include <Wire.h>

byte a1=0;
byte a2=1;
byte a3=2;
byte a4=3;
byte a5=4;
byte a6=5;

void setup()
{
Wire.begin();
Serial.begin(9600);
}

void loop()
{
// trasmissione dei byte allo SLAVE
Wire.beginTransmission(0x04); // indirizzo HW dispositivo
Wire.write(a1);
Wire.write(a2);
Wire.write(a3);
Wire.write(a4);
Wire.write(a5);
Wire.write(a6);
Wire.endTransmission(); //fine trasmissione
delayMicroseconds(500);

//richiesta dei byte dallo SLAVE
Wire.requestFrom(0x04, 6); //richiedo un byte allo slave che ha indirizzo 0x04
while(Wire.available())//attendo la disponibilità di dati sul bus i2c
{
byte b1 = Wire.read();
byte b2 = Wire.read();
byte b3 = Wire.read();
byte b4 = Wire.read();
byte b5 = Wire.read();
byte b6 = Wire.read();

Serial.print(b1);Serial.print(" “);
Serial.print(b2);Serial.print(” “);
Serial.print(b3);Serial.print(” “);
Serial.print(b4);Serial.print(” “);
Serial.print(b5);Serial.print(” ");
Serial.println(b6);
}
delay(5);
}

//SLAVE
#include <Wire.h>

byte a1;
byte a2;
byte a3;
byte a4;
byte a5;
byte a6;

void setup()
{
Serial.begin(9600);
Wire.begin(0x04);
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);
}

void loop()
{
Serial.print(a1);
Serial.print(" “);
Serial.print(a2);
Serial.print(” “);
Serial.print(a3);
Serial.print(” “);
Serial.print(a4);
Serial.print(” “);
Serial.print(a5);
Serial.print(” ");
Serial.println(a6);
delay(50);
}

void receiveEvent(int data)
{
if (data == 6)
{
a1 = Wire.read();
a2 = Wire.read();
a3 = Wire.read();
a4 = Wire.read();
a5 = Wire.read();
a6 = Wire.read();
}
}

void requestEvent()
{
Wire.write(a1);
Wire.write(a2);
Wire.write(a3);
Wire.write(a4);
Wire.write(a5);
Wire.write(a6);
}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

P.S. quell’enorme numero di righe vuote a che servono ? Stai scrivendo un tema e vuoi che risulti più lungo ? :wink: