Library for setting and reading the Pololu minIMU 9 v2 sensor

IMU.h

Committer:
Euler
Date:
2013-10-26
Revision:
0:7b70a3ed96c1

File content as of revision 0:7b70a3ed96c1:

#ifndef IMU_H
#define IMU_H

#include "mbed.h"

// definitions for the gyro sensor
#define L3GD20_ADDR           0xD6
#define L3GD20_CTRL_REG1      0x20
#define L3GD20_CTRL_REG4      0x23
#define L3GD20_STATUS_REG     0x27
#define L3GD20_OUT_X_L        0x28
#define L3GD20_RANGE_250DPS   0x00                // Measurement range selected by CTRL_REG4
#define L3GD20_RANGE_500DPS   0x01                // Default range = 250 Degree-per-Second = 0.7 rev/second
#define L3GD20_RANGE_2000DPS  0x02                // Range determines Sensitivity
#define L3GD20_SENSITIVITY_250DPS   0.00875       // Roughly 22/256 for fixed point match
#define L3GD20_SENSITIVITY_500DPS   0.0175        // Roughly 45/256
#define L3GD20_SENSITIVITY_2000DPS  0.070         // Roughly 18/256
#define L3GD20_DPS_TO_RADS          0.017453293   // = pi/180 degrees/s to rad/s multiplier


// definitions for the accelerometer
#define LSM303_A_ADDR            0x32      // address for writing. +1 for reading, see manual p. 20/42.
#define LSM303_A_CTRL_REG1       0x20
#define LSM303_A_CTRL_REG4       0x23
#define LSM303_A_OUT_X_L         0x28
#define LSM303_A_FS_2G           0x00      // Full Scale measuremetn range - selected by CTRL_REG4
#define LSM303_A_Sensitivity     0.001     // Linear acceleration sensitivity
#define LSM303_A_GRAVITY_EARTH   9.80665   // Earth's gravity in m/s^2 upon calibration of sensor

// definitions for the magnetic sensor
#define LSM303_M_ADDR        0x3C // address for writing. +1 for reading, see datasheet p. 21/42.
#define LSM303_M_CRA_REG     0x00 
#define LSM303_M_CRB_REG     0x01 
#define LSM303_M_MR_REG      0x02
#define LSM303_M_OUT_X_H     0x03        // Watch out: order of H and L reversed 
#define LSM303_M_FS_13G      0x01        // Full Scale measuremetn range - selected by CRB_REG
#define LSM303_M_Sensitivity  1100       // Corresponding sensitivity = 1100 Bits/Gauss


class IMU
{
  public:
/* constructor */
    IMU(PinName sda, PinName scl);

/* accessible functions */
    char init(void);
    char readData(float *);
    void filterData(float *, double *);
    
  private:
      I2C _i2c;
      char address;
      int16_t L3GD20_biasX;  /* digit counts */
      int16_t L3GD20_biasY;
      int16_t L3GD20_biasZ;
      double  g_0;
      double  FF[3];
      double  FD[6][9]; 
};

#endif