





#include <Wire.h>
//スレーブアドレス
#define ADDRESS 0x00
int i;
//マスタからデータのリクエストが来た(送信)
void wire_onRequest() {
Wire.write(i);
}
//マスタからデータが送られてきた(受信)
void wire_onReceive(int c) {
if (Wire.available()) {//読み取る事ができるバイト数が0以上なら
i = Wire.read(); //値を一つ読む
i = i + 2;
}
}
void setup() {
Wire.begin(ADDRESS);
Wire.onRequest(wire_onRequest);
Wire.onReceive(wire_onReceive);
}
void loop() {}
#include <Wire.h>
//接続先のアドレス
#define ADDRESS 0x00
int i;
void setup() {
Serial.begin(9800);
Wire.begin();
Wire.endTransmission();
}
void loop() {
//アドレス0x00のスレーブに接続
Wire.beginTransmission(ADDRESS);
Wire.write(i);
Wire.endTransmission();
Wire.requestFrom(ADDRESS, 1);//アドレス0x00のスレーブに接続し1byte取得する
if (Wire.available()) {
Serial.print(i);
Serial.print(" : ");
Serial.println(Wire.read());
}
i++;
delay(1000);
}
シリアルモニタを開くと、送信した値に+2されて受信しているのが確認できます。
Wire.beginTransmission(ADDRESS); Wire.write(1); Wire.write(2); Wire.write(3); Wire.write(4); Wire.endTransmission();
//マスタからデータが送られてきた(受信)
void wire_onReceive(int c) {
while(Wire.available()) {//読み取る事ができるバイト数が0以上なら
i = Wire.read(); //値を一つ読む
Serial.print(i);
Serial.print(" ");
}
Serial.print("\n");
}
上の"一度に複数の値を送信する"と組み合わせると、このような出力結果になります。
#include <Wire.h>
//接続先のアドレス
#define ADDRESS 0x00
int i;
void setup() {
Serial.begin(9800);
Wire.begin();
Wire.endTransmission();
Wire.setWireTimeout(1000);//タイムアウトする時間を設定
}
void loop() {
//タイムアウトした場合には初期化する
if (Wire.getWireTimeoutFlag()) {
Wire.clearWireTimeoutFlag();
Wire.end();
setup();
}
//アドレス0x00のスレーブに接続
Serial.print("1");
Wire.beginTransmission(ADDRESS);
Serial.print("2");
Wire.write(i);
Serial.print("3");
Wire.endTransmission();
Serial.print("4");
Wire.requestFrom(ADDRESS, 1);//アドレス0x00のスレーブに接続し1byte取得する
Serial.print("5");
if (Wire.available()) {
Serial.print("6");
/*Serial.println(*/Wire.read()/*)*/;
}
Serial.print("\n");
delay(1000);
}
