NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Arduino IDE(Wire.requestFrom関数の使い方)

Wire.requestFrom関数

 Wire.requestFrom関数はI2C※1で接続された他のデバイスにデータを要求します。そのデータはavailable()とreceive()関数を使って取得します。

使用例
 Arduino IDEで使用するWire.requestFrom関数の使用例は以下の通りです。
 試しにこのプログラムをArduinoUNO実行するとセンサー(電子コンパスモジュール)で測定した値をArduinoに取得し、その値から計算された方位がPCのシリアルモニタ上に表示されます。
#include <Wire.h> //I2C Arduino Library
#define address 0x1E //0011110b, I2C 7bit address of HMC5883

void setup() {
  //GY-273
  Serial.begin(9600);
  Wire.begin();
  Wire.beginTransmission(address); //open communication with HMC5883
  Wire.write(0x02); //select mode register
  Wire.write(0x00); //continuous measurement mode
  Wire.endTransmission();
}

void loop() {
  Serial.println(Angleread()) ;          // 方位角を返す
  delay(500) ;                            // 500ms後に繰り返す
}
int Angleread() {
  int x, y, z; //triple axis data
  Wire.beginTransmission(address);
  Wire.write(0x03); //select register 3, X MSB register
  Wire.endTransmission();
  Wire.requestFrom(address, 6);
  if (6 <= Wire.available()) {
    x = Wire.read() << 8; //X msb
    x |= Wire.read(); //X lsb
    z = Wire.read() << 8; //Z msb
    z |= Wire.read(); //Z lsb
    y = Wire.read() << 8; //Y msb
    y |= Wire.read(); //Y lsb
  }
  return atan2((x + 20) , (y + 20) * (-1)) * RAD_TO_DEG + 180; //40と20は補正値
}
イメージ 1
図1:プログラム例

 

Wire.requestFrom(address, count)のパラメータは表1参照

 

表1:Wire.requestFrom関数のパラメータ及び戻り値
項目 内容
address データを要求するデバイスのアドレス(7ビット)
quantity 要求するデータのバイト数
stop(省略可) trueに設定するとstopメッセージをリクエストのあと送信し、
I2Cバスを開放します(デフォルト)。
falseに設定するとrestartメッセージをリクエストのあと送信し、
バスを開放しないことで他のマスタデバイスがメッセージ間に
リクエストを出すのを防ぎます。
戻り値 実際に受信したバイト数を返します。
 
以下補足です

※1:I2C
 I2C(Inter-Integrated Circuit、アイ・スクエアド・シー)はフィリップス社で開発されたシリアルバスです。

 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【ArduinoIDE reference】目次に戻る