LSM303DLH interface library
Dependents: LSM303DLH_Example Arch_Test
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
Generated on Sat Jul 16 2022 16:12:14 by 1.7.2