Comunicazione I2C

Salve a tutti,
sto lavorando ad un progetto che richiede l’utilizzo della libreria Wire di arduino. Ho gia cercato informazioni qui sul forum e"googolando " ma non sono riuscito a trovare soluzione al mio problema e quindi sono qui a chiedere aiuto.
Allora la situazione è la seguente :
ho una scheda arduino (Master) e un ATmega 328 standalone (Slave) che sono collegati attraverso un bus I2C.
Su richiesta del master lo slave legge il valore di un potenziometro lo salva in una variabile di tipo int (16bit) , con le funzioni lowByte e highByte lo scompone nei rispettivi byte. Con le istruzioni Wire.write() scrive sul buffer.
Dal lato master dopo la requestFrom() leggo i byte con le Wire.read() e li scrivo utilizzando un ciclo for in un vettore.
il problema è che stampando sulla seriale i byte ricevuti uno varia ruotando il potenziometro mentre l’altro resta fisso a 255.
Dove sbaglio??
Posto il codice per rendere piu chiare le chiacchiere sopra.

//MASTER
#include <Wire.h>
int receivedValue;

byte buffer[2];
int i = 1;
void setup()
{
  Wire.begin();       //inizializzo la connessione
  Serial.begin(9600);
}

void loop()
{
  Wire.requestFrom(2,2);    //il master invia la richiesta di due byte allo slave con indirizzo 2
 for(int i = 0 ; i < 2; i++)
   {
     byte buffer[2];
     buffer[i]=Wire.read();
     Serial.println(buffer[i]);
     
   }
   delay(500);
}
//SLAVE
#include <Wire.h>
int sensorValueSend;
byte LSB, MSB;

void setup()
{
  Wire.begin(2);                
  Serial.begin(9600);
  Wire.onRequest(requestEvent);  
}
void loop ()                   
{
}
void requestEvent()
{
  sensorValueSend = analogRead(A3);
  MSB = highByte(sensorValueSend);
  LSB = lowByte (sensorValueSend);
  Wire.write(MSB); 
  delay(50);
  Wire.write(LSB); 
  delay(50);
}

Dimenticavo, un enorme grazie a chi voglia aiutarmi !! :)

Perché metti un delay(50) fra l'invio del primo byte e del secondo? Prova a toglierlo.

Intanto grazie dell'intervento :) Tolto il delay(50) ma il risultato non cambia, primo byte che vado a leggere varia tra 0 e 255 ruotando il potenziometro (cosa strana anche questa in quanto dovendo essere il MSB dovrebbe variare tra 0 e 3....mah!) e l'altro inchiodato a 255. Non riesco proprio a capire anche perchè quando invio un byte alla volta con una write() lato slave ed una read() lato master funziona e sono rispettati anche gli intervalli di variabilità dei singoli byte. Help meeee....

Dopo varie ricerche ho trovato il modo di fare quello che mi serviva,si vede che non avevo cercato bene :slight_smile:
Posto il codice, magari torna utile a qualcuno :wink:

//MASTER
#include <Wire.h>

void setup()
{
  Wire.begin();       //inizializzo la connessione
  Serial.begin(9600);
}

void loop()
{

  int available = Wire.requestFrom(2,2);    
  if (available == 2) 
  {
    int receivedValue = Wire.read() << 8 | Wire.read();
     Serial.println(receivedValue);
  }
  delay(500);
}
//SLAVE
#include <Wire.h>

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

void loop ()                   
{ 
}

void requestEvent()
{
  int sensorValueSend = analogRead(A3);
  byte buffer[2];
  buffer[0] = sensorValueSend >> 8;
  buffer[1] = sensorValueSend & 0xff;
  Wire.write(buffer,2);
}