Implemented first Hangar-Service
Dependencies: CalibrateMagneto QuaternionMath
Fork of SML2 by
Accelerometer.cpp
- Committer:
- pvaibhav
- Date:
- 2015-02-17
- Revision:
- 7:604a8369b801
- Parent:
- 6:c12cea26842d
- Child:
- 8:cba37530d480
File content as of revision 7:604a8369b801:
#include "Accelerometer.h" #define DEBUG "BMX055-Acc" #include "Logger.h" Accelerometer::Accelerometer(I2C &i2c) : I2CPeripheral(i2c, 0x18 << 1 /* address */) { if (powerOn()) { INFO("Bosch Sensortec BMX055-Accel found"); powerOff(); } else { WARN("Bosch Sensortec BMX055-Accel not found"); } } bool Accelerometer::powerOn() { write_reg(0x14, 0xB6); // reset wait_ms(2); // page 11 says only 1.3ms, nothing for startup time, so assuming 2ms write_reg(0x11, 0); // set power normal mode write_reg(0x10, 15); // set bandwidth = 250 Hz return read_reg(0x00) == 0xfa; // verify chip ID } void Accelerometer::powerOff() { write_reg(0x11, 1); // deep suspend mode LOG("deep sleep"); } void Accelerometer::start() { // nothing to do right now except reset the timestamp counter timer.stop(); timer.reset(); timer.start(); } void Accelerometer::stop() { // nothing to do right now timer.stop(); } Sensor::Data Accelerometer::read() { Sensor::Data frame; // Check comments in the read() function of the Gyroscope for more info why we read bytes one by one. union { uint8_t bytes[6]; struct { int16_t x; int16_t y; int16_t z; } values; } f; f.bytes[0] = read_reg(0x02) >> 4; f.bytes[1] = read_reg(0x03); f.bytes[2] = read_reg(0x04) >> 4; f.bytes[3] = read_reg(0x05); f.bytes[4] = read_reg(0x06) >> 4; f.bytes[5] = read_reg(0x07); frame.x = f.values.x; frame.y = f.values.y; frame.z = f.values.z; return frame; }