Add a lead sentence |
Consistency: syntax highlighting for code, File: prefix |
||
| 第2行: | 第2行: | ||
== Example code == | == Example code == | ||
< | <syntaxhighlight lang="c"> | ||
#include "Wire.h" | #include "Wire.h" | ||
byte range=0x03; | byte range=0x03; | ||
| 第108行: | 第108行: | ||
AccelerometerInit(); | AccelerometerInit(); | ||
} | } | ||
</ | </syntaxhighlight> | ||
[[Category:Projects]] | [[Category:Projects]] | ||
2026年8月23日 (日) 18:01的最新修訂
Example code for reading the BMA250 triaxial acceleration sensor.
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();
}