LSM303DLH interface library
Dependents: LSM303DLH_Example Arch_Test
LSM303DLH.h@0:9b2a0b783bfc, 2011-10-06 (annotated)
- Committer:
- yamaguch
- Date:
- Thu Oct 06 08:38:06 2011 +0000
- Revision:
- 0:9b2a0b783bfc
0.1
Who changed what in which revision?
User | Revision | Line number | New 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 |