Jatin Sharma
/
RaheeNew
RaheeNew
Fork of Adafruit9-DOf by
Embed:
(wiki syntax)
Show/hide line numbers
Adafruit_LSM303_U.h
00001 /*************************************************************************** 00002 This is a library for the LSM303 Accelerometer and magnentometer/compass 00003 00004 Designed specifically to work with the Adafruit LSM303DLHC Breakout 00005 00006 These displays use I2C to communicate, 2 pins are required to interface. 00007 00008 Adafruit invests time and resources providing this open source code, 00009 please support Adafruit andopen-source hardware by purchasing products 00010 from Adafruit! 00011 00012 Written by Kevin Townsend for Adafruit Industries. 00013 BSD license, all text above must be included in any redistribution 00014 ***************************************************************************/ 00015 #ifndef __LSM303_H__ 00016 #define __LSM303_H__ 00017 00018 #include <Adafruit_Sensor.h> 00019 #include "I2C_base.h" 00020 00021 /*========================================================================= 00022 I2C ADDRESS/BITS 00023 -----------------------------------------------------------------------*/ 00024 #define LSM303_ADDRESS_ACCEL (0x32 >> 1) // 0011001x 00025 #define LSM303_ADDRESS_MAG (0x3C >> 1) // 0011110x 00026 /*=========================================================================*/ 00027 00028 /*========================================================================= 00029 REGISTERS 00030 -----------------------------------------------------------------------*/ 00031 typedef enum 00032 { // DEFAULT TYPE 00033 LSM303_REGISTER_ACCEL_CTRL_REG1_A = 0x20, // 00000111 rw 00034 LSM303_REGISTER_ACCEL_CTRL_REG2_A = 0x21, // 00000000 rw 00035 LSM303_REGISTER_ACCEL_CTRL_REG3_A = 0x22, // 00000000 rw 00036 LSM303_REGISTER_ACCEL_CTRL_REG4_A = 0x23, // 00000000 rw 00037 LSM303_REGISTER_ACCEL_CTRL_REG5_A = 0x24, // 00000000 rw 00038 LSM303_REGISTER_ACCEL_CTRL_REG6_A = 0x25, // 00000000 rw 00039 LSM303_REGISTER_ACCEL_REFERENCE_A = 0x26, // 00000000 r 00040 LSM303_REGISTER_ACCEL_STATUS_REG_A = 0x27, // 00000000 r 00041 LSM303_REGISTER_ACCEL_OUT_X_L_A = 0x28, 00042 LSM303_REGISTER_ACCEL_OUT_X_H_A = 0x29, 00043 LSM303_REGISTER_ACCEL_OUT_Y_L_A = 0x2A, 00044 LSM303_REGISTER_ACCEL_OUT_Y_H_A = 0x2B, 00045 LSM303_REGISTER_ACCEL_OUT_Z_L_A = 0x2C, 00046 LSM303_REGISTER_ACCEL_OUT_Z_H_A = 0x2D, 00047 LSM303_REGISTER_ACCEL_FIFO_CTRL_REG_A = 0x2E, 00048 LSM303_REGISTER_ACCEL_FIFO_SRC_REG_A = 0x2F, 00049 LSM303_REGISTER_ACCEL_INT1_CFG_A = 0x30, 00050 LSM303_REGISTER_ACCEL_INT1_SOURCE_A = 0x31, 00051 LSM303_REGISTER_ACCEL_INT1_THS_A = 0x32, 00052 LSM303_REGISTER_ACCEL_INT1_DURATION_A = 0x33, 00053 LSM303_REGISTER_ACCEL_INT2_CFG_A = 0x34, 00054 LSM303_REGISTER_ACCEL_INT2_SOURCE_A = 0x35, 00055 LSM303_REGISTER_ACCEL_INT2_THS_A = 0x36, 00056 LSM303_REGISTER_ACCEL_INT2_DURATION_A = 0x37, 00057 LSM303_REGISTER_ACCEL_CLICK_CFG_A = 0x38, 00058 LSM303_REGISTER_ACCEL_CLICK_SRC_A = 0x39, 00059 LSM303_REGISTER_ACCEL_CLICK_THS_A = 0x3A, 00060 LSM303_REGISTER_ACCEL_TIME_LIMIT_A = 0x3B, 00061 LSM303_REGISTER_ACCEL_TIME_LATENCY_A = 0x3C, 00062 LSM303_REGISTER_ACCEL_TIME_WINDOW_A = 0x3D 00063 } lsm303AccelRegisters_t; 00064 00065 typedef enum 00066 { 00067 LSM303_REGISTER_MAG_CRA_REG_M = 0x00, 00068 LSM303_REGISTER_MAG_CRB_REG_M = 0x01, 00069 LSM303_REGISTER_MAG_MR_REG_M = 0x02, 00070 LSM303_REGISTER_MAG_OUT_X_H_M = 0x03, 00071 LSM303_REGISTER_MAG_OUT_X_L_M = 0x04, 00072 LSM303_REGISTER_MAG_OUT_Z_H_M = 0x05, 00073 LSM303_REGISTER_MAG_OUT_Z_L_M = 0x06, 00074 LSM303_REGISTER_MAG_OUT_Y_H_M = 0x07, 00075 LSM303_REGISTER_MAG_OUT_Y_L_M = 0x08, 00076 LSM303_REGISTER_MAG_SR_REG_Mg = 0x09, 00077 LSM303_REGISTER_MAG_IRA_REG_M = 0x0A, 00078 LSM303_REGISTER_MAG_IRB_REG_M = 0x0B, 00079 LSM303_REGISTER_MAG_IRC_REG_M = 0x0C, 00080 LSM303_REGISTER_MAG_TEMP_OUT_H_M = 0x31, 00081 LSM303_REGISTER_MAG_TEMP_OUT_L_M = 0x32 00082 } lsm303MagRegisters_t; 00083 /*=========================================================================*/ 00084 00085 /*========================================================================= 00086 MAGNETOMETER GAIN SETTINGS 00087 -----------------------------------------------------------------------*/ 00088 typedef enum 00089 { 00090 LSM303_MAGGAIN_1_3 = 0x20, // +/- 1.3 00091 LSM303_MAGGAIN_1_9 = 0x40, // +/- 1.9 00092 LSM303_MAGGAIN_2_5 = 0x60, // +/- 2.5 00093 LSM303_MAGGAIN_4_0 = 0x80, // +/- 4.0 00094 LSM303_MAGGAIN_4_7 = 0xA0, // +/- 4.7 00095 LSM303_MAGGAIN_5_6 = 0xC0, // +/- 5.6 00096 LSM303_MAGGAIN_8_1 = 0xE0 // +/- 8.1 00097 } lsm303MagGain; 00098 /*=========================================================================*/ 00099 00100 /*========================================================================= 00101 INTERNAL MAGNETOMETER DATA TYPE 00102 -----------------------------------------------------------------------*/ 00103 typedef struct lsm303MagData_s 00104 { 00105 float x; 00106 float y; 00107 float z; 00108 float orientation; 00109 } lsm303MagData; 00110 /*=========================================================================*/ 00111 00112 /*========================================================================= 00113 INTERNAL ACCELERATION DATA TYPE 00114 -----------------------------------------------------------------------*/ 00115 typedef struct lsm303AccelData_s 00116 { 00117 float x; 00118 float y; 00119 float z; 00120 } lsm303AccelData; 00121 /*=========================================================================*/ 00122 00123 /*========================================================================= 00124 CHIP ID 00125 -----------------------------------------------------------------------*/ 00126 #define LSM303_ID (0b11010100) 00127 /*=========================================================================*/ 00128 00129 /* Unified sensor driver for the accelerometer */ 00130 class Adafruit_LSM303_Accel_Unified : public Adafruit_Sensor 00131 { 00132 public: 00133 Adafruit_LSM303_Accel_Unified(int32_t sensorID = -1); 00134 00135 bool begin(void); 00136 void getEvent(sensors_event_t*); 00137 void getSensor(sensor_t*); 00138 void enableAutoRange(bool enable){} 00139 00140 private: 00141 lsm303AccelData _accelData; // Last read accelerometer data will be available here 00142 int32_t _sensorID; 00143 00144 void write8(byte address, byte reg, byte value); 00145 byte read8(byte address, byte reg); 00146 void read(void); 00147 }; 00148 00149 /* Unified sensor driver for the magnetometer */ 00150 class Adafruit_LSM303_Mag_Unified : public Adafruit_Sensor 00151 { 00152 public: 00153 Adafruit_LSM303_Mag_Unified(int32_t sensorID = -1); 00154 00155 bool begin(void); 00156 void enableAutoRange(bool enable); 00157 void setMagGain(lsm303MagGain gain); 00158 void getEvent(sensors_event_t*); 00159 void getSensor(sensor_t*); 00160 00161 private: 00162 lsm303MagGain _magGain; 00163 lsm303MagData _magData; // Last read magnetometer data will be available here 00164 int32_t _sensorID; 00165 bool _autoRangeEnabled; 00166 00167 void write8(byte address, byte reg, byte value); 00168 byte read8(byte address, byte reg); 00169 void read(void); 00170 }; 00171 00172 #endif
Generated on Wed Jul 13 2022 18:41:10 by 1.7.2