LSM303DLH interface library

Dependents:   LSM303DLH_Example Arch_Test

Committer:
yamaguch
Date:
Thu Oct 06 08:38:06 2011 +0000
Revision:
0:9b2a0b783bfc
0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 0:9b2a0b783bfc 1 #ifndef LSM303DLH_H
yamaguch 0:9b2a0b783bfc 2 #define LSM303DLH_H
yamaguch 0:9b2a0b783bfc 3
yamaguch 0:9b2a0b783bfc 4 #include "mbed.h"
yamaguch 0:9b2a0b783bfc 5
yamaguch 0:9b2a0b783bfc 6 /**/
yamaguch 0:9b2a0b783bfc 7 enum ACC_ODR {
yamaguch 0:9b2a0b783bfc 8 ACC_ODR_50HZ = 0,
yamaguch 0:9b2a0b783bfc 9 ACC_ODR_100HZ = 1,
yamaguch 0:9b2a0b783bfc 10 ACC_ODR_400HZ = 2,
yamaguch 0:9b2a0b783bfc 11 ACC_ODR_1000HZ = 3,
yamaguch 0:9b2a0b783bfc 12 };
yamaguch 0:9b2a0b783bfc 13
yamaguch 0:9b2a0b783bfc 14 enum ACC_RANGE {
yamaguch 0:9b2a0b783bfc 15 ACC_RANGE_2G = 0,
yamaguch 0:9b2a0b783bfc 16 ACC_RANGE_4G = 1,
yamaguch 0:9b2a0b783bfc 17 ACC_RANGE_8G = 3,
yamaguch 0:9b2a0b783bfc 18 };
yamaguch 0:9b2a0b783bfc 19
yamaguch 0:9b2a0b783bfc 20 enum MAG_ODR {
yamaguch 0:9b2a0b783bfc 21 MAG_ODR_0_75HZ = 0,
yamaguch 0:9b2a0b783bfc 22 MAG_ODR_1_5HZ = 1,
yamaguch 0:9b2a0b783bfc 23 MAG_ODR_3_0HZ = 2,
yamaguch 0:9b2a0b783bfc 24 MAG_ODR_7_5HZ = 3,
yamaguch 0:9b2a0b783bfc 25 MAG_ODR_15HZ = 4,
yamaguch 0:9b2a0b783bfc 26 MAG_ODR_30HZ = 5,
yamaguch 0:9b2a0b783bfc 27 MAG_ODR_75HZ = 6,
yamaguch 0:9b2a0b783bfc 28 };
yamaguch 0:9b2a0b783bfc 29
yamaguch 0:9b2a0b783bfc 30 enum MAG_RANGE {
yamaguch 0:9b2a0b783bfc 31 MAG_RANGE_1_3GAUSS = 1,
yamaguch 0:9b2a0b783bfc 32 MAG_RANGE_1_9GAUSS = 2,
yamaguch 0:9b2a0b783bfc 33 MAG_RANGE_2_5GAUSS = 3,
yamaguch 0:9b2a0b783bfc 34 MAG_RANGE_4_0GAUSS = 4,
yamaguch 0:9b2a0b783bfc 35 MAG_RANGE_4_7GAUSS = 5,
yamaguch 0:9b2a0b783bfc 36 MAG_RANGE_5_6GAUSS = 6,
yamaguch 0:9b2a0b783bfc 37 MAG_RANGE_8_1GAUSS = 7,
yamaguch 0:9b2a0b783bfc 38 };
yamaguch 0:9b2a0b783bfc 39
yamaguch 0:9b2a0b783bfc 40 enum INT_TYPE {INT1, INT2};
yamaguch 0:9b2a0b783bfc 41
yamaguch 0:9b2a0b783bfc 42 class LSM303DLH {
yamaguch 0:9b2a0b783bfc 43 public:
yamaguch 0:9b2a0b783bfc 44 float ax, ay, az;
yamaguch 0:9b2a0b783bfc 45 float mx, my, mz;
yamaguch 0:9b2a0b783bfc 46
yamaguch 0:9b2a0b783bfc 47 LSM303DLH(PinName sda = p9, PinName scl = p10, PinName int1 = NC, PinName int2 = NC);
yamaguch 0:9b2a0b783bfc 48 bool setOutputDataRate(ACC_ODR acc_odr, MAG_ODR mag_odr);
yamaguch 0:9b2a0b783bfc 49 bool setMeasurementRange(ACC_RANGE acc_range, MAG_RANGE mag_range);
yamaguch 0:9b2a0b783bfc 50 bool read();
yamaguch 0:9b2a0b783bfc 51 bool read(float *ax, float *ay, float *az, float *mx, float *my, float *mz);
yamaguch 0:9b2a0b783bfc 52 float getHeading();
yamaguch 0:9b2a0b783bfc 53 float getHeading(float x, float y, float z);
yamaguch 0:9b2a0b783bfc 54 void attach(INT_TYPE type, char config, char threshold, char duration, void (*handler)(void));
yamaguch 0:9b2a0b783bfc 55 template<typename T> void attach(T *t, INT_TYPE type, char config, char threshold, char duration, void (*handler)(void));
yamaguch 0:9b2a0b783bfc 56
yamaguch 0:9b2a0b783bfc 57 private:
yamaguch 0:9b2a0b783bfc 58 I2C i2c;
yamaguch 0:9b2a0b783bfc 59 int acc_range, mag_range;
yamaguch 0:9b2a0b783bfc 60 InterruptIn int1, int2;
yamaguch 0:9b2a0b783bfc 61
yamaguch 0:9b2a0b783bfc 62 bool recv(char sad, char sub, char *buf, int length);
yamaguch 0:9b2a0b783bfc 63 bool send(char sad, char sub, char data);
yamaguch 0:9b2a0b783bfc 64 };
yamaguch 0:9b2a0b783bfc 65
yamaguch 0:9b2a0b783bfc 66 #endif