前にもやった気がしなくもないですが、自分が完全に忘れていたので今回はi2cをします。

 まず、勘違いしていたのですが、SoftwareSerialや普通のシリアル通信はI2Cとは関係ありません。なんでこれを間違えていたのかわからないのですが、なぜかRX,TXピンで通信しようとしていました。正しくはSDA(A4),SCL(A5)ピンですね。

 とりあえず今回はArduino同士でI2Cをします。

・配線

Untitled Sketch_ブレッドボード
 SDAとSDA、SCLとSCL、GNDとGNDをつなぎます。

・プログラム

①master
5秒おきにリクエスト送っているだけです。
#include <Wire.h>

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

void loop() {
  Wire.requestFrom(8, 6);

  while (Wire.available()) {
    char c = Wire.read();
    Serial.print(c);
  }
  Serial.println("");
  delay(500);
}

②slave
リクエストが来た時にセンサーの値を返します。
#include <Wire.h>

void setup() {
  Wire.begin(8);
  Wire.onRequest(requestEvent);
}

void loop() {
  delay(100);
}

void requestEvent() {
  Wire.write("hello ");
}

 これを二台のArduinoに入れて動かすとmasterのシリアルモニタにhelloと表示されます。


 今回はここまでです。次回はどうにかします。それではまた今度。