還有一篇基本篇可參考:http://lolikitty.pixnet.net/blog/post/163032620
#include <Wire.h> // LSM303DLHC 的 i2c 地址。由於 Arduino i2c 資料空間是 7 bit 所以要右移一個位元 int i2cAddress = 0x32 >> 1; 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; }
執行結果:
全站熱搜
留言列表