/*
  マスター側
  I2C マスターからスレーブへ書込み
  I2C スレーブアドレス 0x08

  x1~x6まで6バイト分送信

  開発環境
  Windows11 Prox64
  Arduino IDE 2.2.2-rc9
 
  date 2023-08-29
  Program by.tsurutsuru
  サンプルを参考にしました。ファイル→スケッチ例→Wire→master_writer
*/
#include <Wire.h>

void setup()
{
  Wire.begin(8);          // スレーブ側の I2C アドレス
//  Serial.begin(9600) ;
}

byte x6 = 1;              //送信はバイト単位
byte x5 = 2;
byte x4 = 3;
byte x3 = 4;
byte x2 = 5;
byte x1 = 6;

void loop()
{
  Wire.beginTransmission(8); // スレーブ側の I2C アドレス
  Wire.write(x1);
  Wire.write(x2);
  Wire.write(x3);
  Wire.write(x4);
  Wire.write(x5);
  Wire.write(x6);
  Wire.endTransmission();    // 6バイト分 送信

  delay(500);
}
//0000000000000000000000000000000000000000000000000000000000000000

//0000000000000000000000000000000000000000000000000000000000000000


/*
  スレーブ側
  I2C スレーブ側がマスターからのデータを読み込み
  I2C スレーブアドレス 0x08

  x1~x6まで6バイト分を受信

 
  date 2023-08-29
  Program by.tsurutsuru
  サンプルを参考にしました。ファイル→スケッチ例→Wire→slave_receiver
*/

#include <Wire.h>

void setup()
{
  Wire.begin(8);                // I2C アドレス
  Wire.onReceive(receiveEvent); // マスタからデータが送られてきたときに呼ばれる関数(マスタから受信したデータのバイト数)
  Serial.begin(9600);
}

void loop()
{
  delay(100);
}


void receiveEvent(int howbyte)  //(マスタから受信したデータのバイト数 int型でないとエラーが出る)
{
   Serial.println(howbyte);  // 何バイト受信したか

  byte x[howbyte];
  for(byte i=1 ; i<= howbyte ;i++)
  {
    x[i] = Wire.read();
    Serial.print(x[i]);
    Serial.print(",");
  }

/*
  //上のfor文をばらすとこうなります
  byte x1 = Wire.read();
  Serial.print(x1);

  byte x2 = Wire.read();
  Serial.print(x2);

  byte x3 = Wire.read();
  Serial.print(x3);

  byte x4 = Wire.read();
  Serial.print(x4);

  byte x5 = Wire.read();
  Serial.print(x5);

  byte x6 = Wire.read();
  Serial.print(x6);
*/
  Serial.println();
}