for interfacing the sparkfun boards
Dependencies: ADXL345_I2C HMC5883L IMUfilter ITG3200_HelloWorld mbed
ADXL345HL.cpp
- Committer:
- sandwich
- Date:
- 2014-04-29
- Revision:
- 0:441caaf895d8
File content as of revision 0:441caaf895d8:
#include "ADXL345HL.h" void ADXL345HL::init(int calibsamples, int readsampls, float samplrate) { accelerometer=new ADXL345_I2C(p28,p27); calibrationsamples=calibsamples; readsamples=readsampls; samplerate=samplrate; output=new double[3]; //Go into standby mode to configure the device. accelerometer->setPowerControl(0x00); wait(0.001); //Full resolution, +/-16g, 4mg/LSB. accelerometer->setDataFormatControl(0x0B); wait(0.001); //200Hz data rate. accelerometer->setDataRate(ADXL345_200HZ); wait(0.001); //Measurement mode. accelerometer->setPowerControl(0x08); //See http://www.analog.com/static/imported-files/application_notes/AN-1077.pdf wait_ms(22); } void ADXL345HL::calibrateAccelerometer(void) { double a_xAccumulator = 0; double a_yAccumulator = 0; double a_zAccumulator = 0; //Take a number of readings and average them //to calculate the zero g offset. for (int i = 0; i < calibrationsamples; i++) { accelerometer->getOutput(readings); a_xAccumulator += (int16_t) readings[0]; a_yAccumulator += (int16_t) readings[1]; a_zAccumulator += (int16_t) readings[2]; wait(samplerate); } a_xAccumulator /= calibrationsamples; a_yAccumulator /= calibrationsamples; a_zAccumulator /= calibrationsamples; //At 4mg/LSB, 250 LSBs is 1g. xBias = a_xAccumulator; yBias = a_yAccumulator; zBias=a_zAccumulator; //zBias = (a_zAccumulator - 250); a_xAccumulator = 0; a_yAccumulator = 0; a_zAccumulator = 0; } double* ADXL345HL::sampleAccelerometer(void) { double a_xAccumulator = 0; double a_yAccumulator = 0; double a_zAccumulator = 0; for (int i=0; i<readsamples; ++i) { accelerometer->getOutput(readings); a_xAccumulator += (int16_t) readings[0]; a_yAccumulator += (int16_t) readings[1]; a_zAccumulator += (int16_t) readings[2]; } //Average the samples, remove the bias, and calculate the acceleration //in m/s/s. output[0] = ((a_xAccumulator / readsamples) - xBias) * ACCELEROMETER_GAIN; output[1] = ((a_yAccumulator / readsamples) - yBias) * ACCELEROMETER_GAIN; output[2] = ((a_zAccumulator / readsamples) - zBias) * ACCELEROMETER_GAIN; return output; } ADXL345HL::ADXL345HL() { } ADXL345HL::~ADXL345HL() { delete[] output; delete accelerometer; }