ArduinoでLSM303DLHCを使って加速度を得るスケッチを作成したのですが上手くいきません。
I2Cインタフェースなので、既存のWireライブラリと
http://www.ccad.sist.chukyo-u.ac.jp/~mito/ss/Embedded/Arduino/temp/index.htm
上記HPで使用されているI2Cライブラリの二種類で試したのですが、どちらも同じ様にうまくいきません。
コンパイルもでき、値(正常ではないですが)も返ってきているので、原因が自分では分かりませんでした。
I2Cライブラリを使用したスケッチ
- コード: 全て選択
#include <I2C.h>
int address = 0x19; // 加速度センサのスレーブアドレス
byte x1 = 0; // 受信データを入れる
byte x2 = 0;
byte y1 = 0;
byte y2 = 0;
byte z1 = 0;
byte z2 = 0;
void setup(){
I2c.begin();
Serial.begin(9600);
delay(10);
}
void loop(){
I2c.write(address,0x20,0x27);
I2c.read(address,0x28,1);
x1 = I2c.receive(); //delay(500);
I2c.read(address,0x29,1);
x2 = I2c.receive(); //delay(500);
I2c.read(address,0x2a,1);
y1 = I2c.receive(); //delay(500);
I2c.read(address,0x2b,1);
y2 = I2c.receive(); //delay(500);
I2c.read(address,0x2c,1);
z1 = I2c.receive(); //delay(500);
I2c.read(address,0x2d,1);
z2 = I2c.receive(); //delay(500);
Serial.print("x = ");
Serial.print(x1,HEX);
Serial.print(" ");
Serial.println(x2,HEX);
Serial.print("y = ");
Serial.print(y1,HEX);
Serial.print(" ");
Serial.println(y2,HEX);
Serial.print("z = ");
Serial.print(z1,HEX);
Serial.print(" ");
Serial.println(z2,HEX);
購入したストロベリーリナックスさんの説明書には
「とりあえず動作させるには、内部レジスタ0x20に0x27を書き込む。
内部レジスタ0x28からの連続6バイトがXYZの加速度データです」と書かれています。
単純に書き込み命令で0x20に0x27を書き込んだ後、0x28から読み出し命令を処理するように書きました。
実行結果は
- コード: 全て選択
x = 40 FF
y = 0 0
z = 80 39
ok
x = 80 FF
y = 40 0
z = 80 39
ok
x = 40 FF
y = 0 0
z = C0 39
ok
x = 80 FF
y = 40 0
z = 0 3A
: :
のようにある一定の数値がランダム(?)に返ってきます。
モジュールを動かさない状態でも、動かしても同じような結果となります。
Wireライブラリでもほぼ同じ流れのスケッチを作成しましたが、結果は同じようになってしまします。
スケッチのどこに問題があるのでしょうか?
回路は先生にも一応見ていただいて、値も返ってきているので問題ないと思うのですが...
すみませんが解決方法が分かる方、回答お願いします。