Inviare più byte via I2C - manda solo il primo

Ciao a tutti, torno a rompervi le scatole per un problema che ho con il mio AtTiny che dovrebbe inviare tre byte

Questo è il codice che io ho messo (la funzione onRequest viene richiamata tre volte giusto? non devo inviarli tutti dentro alla stessa funzione, in questo caso il problema sarebbe ancora più grave perchè proprio non comunica...)

void requestEvent()
{  
  i++;
  TinyWireS.send(i);
  if(i==3){
    i=0;
    buff[i]=0;
  };
}

i era definita nulla in partenza, quindi dovrebbe vedersi nella seriale del master 1 2 3, invece leggo correttamente 1, poi due volte 0

Nel master leggo così:

 Wire.requestFrom(I2C_SLAVE_ADDR,3); 
  i=0;
  if (Wire.available()) {
    buff[i]=Wire.read();
    i++;
  };
  Serial.print("leggo: ");
  Serial.print (buff[0]);
  Serial.print(" ");
  Serial.print (buff[1]);
  Serial.print(" ");
  Serial.println (buff[2]);

Sapete dirmi dove sbaglio? :) Ho tempo fino a domani sera per risolvere :blush: Grazie mille

Prova con

while (Wire.available()) {
    buff[i++] = Wire.read();
 }

ma potresti fare la pipi fuori dal vasino se arrivano più di 3 dati.
oppure con

if (Wire.available()) {
    for(i=0; i<3; i++) buff[i] = Wire.read();
 }

O se il ciclo viene ripetuto più volte

Wire.requestFrom(I2C_SLAVE_ADDR,3); 
   if (Wire.available()) {
    buff[i]=Wire.read();
    i++;
  }
  if(i==3){
    Serial.print("leggo: ");
    Serial.print (buff[0]);
    Serial.print(" ");
    Serial.print (buff[1]);
    Serial.print(" ");
    Serial.println (buff[2]);
    i=0;
  }