2013年7月29日月曜日

メモ:いつものI2C

ArduinoでI2Cを使うときによく使うコピペ用

↓ここから
//書き込み
Wire.beginTransmission();
Wire.write(0x);

Wire.endTransmission();


//読み込み、パターンはデータシート確認のこと
Wire.beginTransmission();
Wire.write(0x);
Wire.endTransmission(false);
Wire.requestFrom(int(),1,false);
output = Wire.read();

Wire.endTransmission(true);

//連続読み込み(6つのレジスタから1byteずつ読み込む場合)
byte addr[6]={0x,0x,0x,0x,0x,0x,};
byte read_data[6]={0,0,0,0,0,0};   //2byte以上のときは2次元配列に

for(int i=0;i<6;i++){
Wire.beginTransmission( );
Wire.write( addr[i] );
Wire.endTransmission(false);
Wire.requestFrom(int( ),1,false);
read_data[i] = Wire.read();   
Wire.endTransmission(true);
  }

//データを8ビットシフトして他のbyteとつなげる。便利

int hl_joint(byte high,byte low){
  int high_data = int(high) << 8;
  int output = high_data | int(low);

  return output;
}

//レジスタ6つのデータを読み込んで繋げて出力する関数。3軸センサーに。
//devはデバイスのアドレス、xyzは出力を入れる配列(出力の型は自由)
void read_xyz(byte dev,int xyz[]){

byte addr[6]={0x,0x,0x,0x,0x,0x};
byte read_data[6]={0,0,0,0,0,0};   //2byte以上のときは2次元配列に

for(int i=0;i<6;i++){
Wire.beginTransmission(dev);
Wire.write( addr[i] );
Wire.endTransmission(false);
Wire.requestFrom(int(dev),1,false);
read_data[i] = Wire.read();   
Wire.endTransmission(true);
  }
// read_data[0]=Low_byte ,read_data[1]=High_byte・・・の場合

for(int j=0;j<3;j++){
 xyz[j]=hl_joint(read_data[2*j+1],read_data[2*j]);
}

}

とりあえず以上

0 件のコメント:

コメントを投稿