還有一篇基本篇可參考:http://lolikitty.pixnet.net/blog/post/163032620
先用i2cscanner找出LSM303DLHC的位址
#include <Wire.h>
// LSM303DLHC 的 i2c 地址。
int i2cAddress = 0x18;
void setup() {
Serial.begin(9600);
Serial.println("-------------------");
Wire.begin(); // 啟用 i2c
writeReg(0x20,0b00100111); // 打開三軸加速計的電源 ,設定每秒讀取10次,啟用XYZ軸
}
void loop() {
Wire.beginTransmission(i2cAddress);
Wire.write(0x28 | (1 << 7));
Wire.endTransmission();
Wire.requestFrom(i2cAddress, 6);
byte xla = Wire.read();
byte xha = Wire.read();
byte yla = Wire.read();
byte yha = Wire.read();
byte zla = Wire.read();
byte zha = Wire.read();
int x = (xha << 8 | xla) >> 4;
int y = (yha << 8 | yla) >> 4;
int z = (zha << 8 | zla) >> 4;
Serial.print("X : ");
Serial.print(x);
Serial.print(" Y : ");
Serial.print(y);
Serial.print(" Z : ");
Serial.println(z);
delay(500);
}
/*************************************************************
* 寫入佔存器:writeReg(int reg, int value)
* reg:佔存器地址
* value:要寫入的值
*/
void writeReg(int reg, int value){
Wire.beginTransmission(i2cAddress);
Wire.write(reg);
Wire.write(value);
Wire.endTransmission();
}
/*************************************************************
* 讀取佔存器:readReg(int reg)
* reg:要讀取的佔存器地址
*/
int readReg(int reg){
Wire.beginTransmission(i2cAddress);
Wire.write(reg);
Wire.endTransmission();
Wire.requestFrom(i2cAddress, 1);
int value = Wire.read();
Wire.endTransmission();
return value;
}