還有一篇進階篇可參考:http://lolikitty.pixnet.net/blog/post/163257851

 

#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() {
    Serial.print("X : ");
    Serial.print(readReg(0x29));
    Serial.print("    Y : ");
    Serial.print(readReg(0x2B));
    Serial.print("    Z : ");
    Serial.println(readReg(0x2D));
    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;
}


輸出結果:

I2C1  

 

 資料手冊說明:(查看完整請資料手冊請點我)


 針對上面 writeReg(0x20,0b00100111); 程式碼的說明

I2C2

 

上面程式碼 readReg(0x29)、readReg(0x2B)、readReg(0x2D) 的來源是資料手冊的這裡:

 

 I2C3  

 

 

 

 

arrow
arrow
    全站熱搜

    黃彥霖 發表在 痞客邦 留言(2) 人氣()