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 件のコメント:
コメントを投稿