於 2018年8月23日 (四) 11:14 由
Tommy (對話 | 貢獻) 所做的修訂
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
example code
#include "Wire.h"
byte range=0x03;
float divi=16;
int addr = 0x18;
void setup()
{
Serial.begin(115200);
Wire.begin();
Wire.beginTransmission(addr); // address of the accelerometer
// Start I2C Transmission
Wire.beginTransmission(addr);
// Select range selection register
Wire.write(0x0F);
// Set range +/- 2g
Wire.write(0x03);
// Stop I2C Transmission
Wire.endTransmission();
// Start I2C Transmission
Wire.beginTransmission(addr);
// Select bandwidth register
Wire.write(0x10);
// Set bandwidth 7.81 Hz
Wire.write(0x10);
// Stop I2C Transmission
Wire.endTransmission();
// low pass filter
Wire.beginTransmission(addr);
Wire.write(0x20); //register address
Wire.write(0x05); //can be set at"0x05""0x04"......"0x01""0x00", refer to Datashhet on wiki
Wire.endTransmission();
}
void AccelerometerInit()
{
unsigned int data[0];
// Start I2C Transmission
Wire.beginTransmission(addr);
// Select Data Registers (0x02 − 0x07)
Wire.write(0x02);
// Stop I2C Transmission
Wire.endTransmission();
// Request 6 bytes
Wire.requestFrom(addr, 6);
// Read the six bytes
// xAccl lsb, xAccl msb, yAccl lsb, yAccl msb, zAccl lsb, zAccl msb
while(!Wire.available())
;
data[0] = Wire.read();
data[1] = Wire.read();
data[2] = Wire.read();
data[3] = Wire.read();
data[4] = Wire.read();
data[5] = Wire.read();
delay(10);
// Convert the data to 10 bits
float xAccl = ((data[1] * 256.0) + (data[0] & 0xC0)) / 64;
if (xAccl > 511)
{
xAccl -= 1024;
}
float yAccl = ((data[3] * 256.0) + (data[2] & 0xC0)) / 64;
if (yAccl > 511)
{
yAccl -= 1024;
}
float zAccl = ((data[5] * 256.0) + (data[4] & 0xC0)) / 64;
if (zAccl > 511)
{
zAccl -= 1024;
}
// Output data to the serial monitor
Serial.print("X-Axis :");
Serial.print(xAccl);
Serial.print(" ");
Serial.print("Y-Axis :");
Serial.print(yAccl);
Serial.print(" ");
Serial.print("Z-Axis :");
Serial.println(zAccl);
}
void loop()
{
/*
switch(range) //change the data dealing method based on the range u've set
{
case 0x00:divi=16; break;
case 0x01:divi=8; break;
case 0x02:divi=4; break;
case 0x03:divi=2; break;
default: Serial.println("range setting is Wrong,range:from 0to 3.Please check!");while(1);
}
*/
AccelerometerInit();
}