ADXL345 是一種常見、便宜、簡單、好用的 3 軸加速度計。我這片 ADXL345 模組是我在露天拍賣買的,約台幣 110 元...,比起之前買的 LSM303DLH 就要台幣 6、7 百元要來的便宜多了...Orz

另外記得 信號線 都要接 10K 上拉電阻,不然會讀不到...( 只要是走 i2c 協定的都要接上拉電阻

實際接線圖 (右邊小塊板子就是 ADXL345 )

3

特寫 ADXL345 模組:

2

執行結果:

Forbidden filename  

程式碼:

#include <Wire.h>

int I2C_Address = 0xA7 >> 1; // ADXL345 的 I2C 地址

int X0, X1, Y0, Y1, Z1, Z0;
float X,Y,Z;

void setup(){
    Serial.begin(9600);
    Serial.println("Start : \n------------------------------------");
    
    Wire.begin();  //初始化 I2C
    setReg(0x2D, 0xA); // (打開電源, 設定輸出資料速度為 100 Hz)  
}

void loop(){
    X0 = getData(0x32); // 取得 X 軸 低位元資料
    X1 = getData(0x33); // 取得 X 軸 高位元資料
    X = ((X1 << 8)  + X0) / 256.0;
 
    Y0 = getData(0x34); // 取得 Y 軸 低位元資料
    Y1 = getData(0x35); // 取得 Y 軸 高位元資料
    Y = ((Y1 << 8)  + Y0) / 256.0;
 
    Z0 = getData(0x36); // 取得 Z 軸 低位元資料
    Z1 = getData(0x37); // 取得 Y 軸 高位元資料
    Z = ((Z1 << 8)  + Z0) / 256.0;
    
    Serial.print("X= ");
    Serial.print(X);
    Serial.print("    Y= ");
    Serial.print(Y);
    Serial.print("    Z= ");
    Serial.println(Z);
    
    delay(500);
}

/* setReg(reg,data):寫入佔存器
 * 參數:
 *     reg → 指定佔存器位址
 *     data → 要寫入的資料
 */
void setReg(int reg, int data){
    Wire.beginTransmission(I2C_Address);
    Wire.write(reg); // 指定佔存器
    Wire.write(data); // 寫入資料
    Wire.endTransmission();
}

/* getData(reg):取得佔存器裡的資料
 * 參數:reg → 佔存器位址
 */
int getData(int reg){
    Wire.beginTransmission(I2C_Address);
    Wire.write(reg);
    Wire.endTransmission();
    
    Wire.requestFrom(I2C_Address,1);
    
    if(Wire.available()<=1){
        return Wire.read();
    }
}
 




    全站熱搜

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