ADXL三軸加速度--Arduino
阿新 • • 發佈:2019-01-07
接線如圖:
程式碼如下
開啟Arduino的串列埠繪圖器可以前後左右上去移動,觀察效果#include <Wire.h>//呼叫Arduino自帶庫 #define Register_ID 0 //器件ID 十六進位制為0x00 十進位制為0 #define Register_2D 0x2D //省電特性控制 #define Register_X0 0x32 //X軸資料0 #define Register_X1 0x33 //X軸資料1 #define Register_Y0 0x34 //Y軸資料0 #define Register_Y1 0x35 //Y軸資料1 #define Register_Z0 0x36 //Z軸資料0 #define Register_Z1 0x37 //Z軸資料1 //ADXL345暫存器對映地址 int ADXAddress = 0xA7 >> 1;// 轉換為7位從地址 int reading = 0; int val=0; int X0,X1,X_out; int Y0,Y1,Y_out; int Z1,Z0,Z_out; double Xg,Yg,Zg; //定義變數 void setup() { Wire.begin(); //初始化I2C Serial.begin(9600); //初始化串列埠 delay(100); // enable to measute g data Wire.beginTransmission(ADXAddress);//開啟發送 Wire.write(Register_2D);//寫入ADXL345暫存器對映地址 Wire.write(8); //測量使能 Wire.endTransmission(); // 停止傳送 } void loop() { //讀取X軸資料 Wire.beginTransmission(ADXAddress); // 開啟發送 Wire.write(Register_X0);//寫入ADXL345暫存器對映地址 Wire.write(Register_X1);//寫入ADXL345暫存器對映地址 Wire.endTransmission();//結束髮送 Wire.requestFrom(ADXAddress,2); //請求 ADXL345 二個位元組 if(Wire.available()<=2) //獲取<=2個數據 { X0 = Wire.read(); X1 = Wire.read(); X1=X1<<8; X_out=X0+X1; } //讀取Y軸資料↓ Wire.beginTransmission(ADXAddress); // 開啟發送 Wire.write(Register_Y0);//寫入ADXL345暫存器對映地址 Wire.write(Register_Y1);//寫入ADXL345暫存器對映地址 Wire.endTransmission();//結束髮送 Wire.requestFrom(ADXAddress,2); //請求ADXL345二個位元組 if(Wire.available()<=2) //獲取<=2個數據 { Y0 = Wire.read(); Y1 = Wire.read(); Y1=Y1<<8; Y_out=Y0+Y1; } //讀取Z軸資料 Wire.beginTransmission(ADXAddress); // 開啟發送 Wire.write(Register_Z0);//寫入ADXL345暫存器對映地址 Wire.write(Register_Z1);//寫入ADXL345暫存器對映地址 Wire.endTransmission();//結束髮送 Wire.requestFrom(ADXAddress,2); //請求ADXL345二個位元組 if(Wire.available()<=2) //獲取<=2個數據 { Z0 = Wire.read(); Z1 = Wire.read(); Z1=Z1<<8; Z_out=Z0+Z1; } /* Xg=X_out/256.0; Yg=Y_out/256.0; Zg=Z_out/256.0; */ Xg=X_out; Yg=Y_out; Zg=Z_out; Serial.print("X= "); Serial.print(Xg); Serial.print(" "); Serial.print("Y= "); Serial.print(Yg); Serial.print(" "); Serial.print("Z= "); Serial.print(Zg); Serial.println(" "); delay(200); //串列埠輸出 }