LSM303DLH interface library

Dependents:   LSM303DLH_Example Arch_Test

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LSM303DLH.h Source File

LSM303DLH.h

00001 #ifndef LSM303DLH_H
00002 #define LSM303DLH_H
00003 
00004 #include "mbed.h"
00005 
00006 /**/
00007 enum ACC_ODR {
00008     ACC_ODR_50HZ = 0,
00009     ACC_ODR_100HZ = 1,
00010     ACC_ODR_400HZ = 2,
00011     ACC_ODR_1000HZ = 3,
00012 };
00013 
00014 enum ACC_RANGE {
00015     ACC_RANGE_2G = 0,
00016     ACC_RANGE_4G = 1,
00017     ACC_RANGE_8G = 3,
00018 };
00019 
00020 enum MAG_ODR {
00021     MAG_ODR_0_75HZ = 0,
00022     MAG_ODR_1_5HZ = 1,
00023     MAG_ODR_3_0HZ = 2,
00024     MAG_ODR_7_5HZ = 3,
00025     MAG_ODR_15HZ = 4,
00026     MAG_ODR_30HZ = 5,
00027     MAG_ODR_75HZ = 6,
00028 };
00029 
00030 enum MAG_RANGE {
00031     MAG_RANGE_1_3GAUSS = 1,
00032     MAG_RANGE_1_9GAUSS = 2,
00033     MAG_RANGE_2_5GAUSS = 3,
00034     MAG_RANGE_4_0GAUSS = 4,
00035     MAG_RANGE_4_7GAUSS = 5,
00036     MAG_RANGE_5_6GAUSS = 6,
00037     MAG_RANGE_8_1GAUSS = 7,
00038 };
00039 
00040 enum INT_TYPE {INT1, INT2};
00041 
00042 class LSM303DLH {
00043 public:
00044     float ax, ay, az;
00045     float mx, my, mz;
00046 
00047     LSM303DLH(PinName sda = p9, PinName scl = p10, PinName int1 = NC, PinName int2 = NC);
00048     bool setOutputDataRate(ACC_ODR acc_odr, MAG_ODR mag_odr);
00049     bool setMeasurementRange(ACC_RANGE acc_range, MAG_RANGE mag_range);
00050     bool read();
00051     bool read(float *ax, float *ay, float *az, float *mx, float *my, float *mz);
00052     float getHeading();
00053     float getHeading(float x, float y, float z);
00054     void attach(INT_TYPE type, char config, char threshold, char duration, void (*handler)(void));
00055     template<typename T> void attach(T *t, INT_TYPE type, char config, char threshold, char duration, void (*handler)(void));
00056 
00057 private:
00058     I2C i2c;
00059     int acc_range, mag_range;
00060     InterruptIn int1, int2;
00061 
00062     bool recv(char sad, char sub, char *buf, int length);
00063     bool send(char sad, char sub, char data);
00064 };
00065 
00066 #endif