/*
マスター側
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);
}
マスター側
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();
}
スレーブ側
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();
}