Modified to run on Renesas GR Peach board
Dependencies: EthernetInterface HTTP-Server Webpage mbed-rpc mbed-src
Fork of HTTPServer_echoback by
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 00020 00021 /*========================================================================= 00022 I2C ADDRESS/BITS 00023 -----------------------------------------------------------------------*/ 00024 #define LSM303_ADDRESS_ACCEL (0x32)// >> 1) // 0011001x 00025 #define LSM303_ADDRESS_MAG (0x3C)// >> 1) // 0011110x 00026 #define LSM303_WRITE (0x00) 00027 #define LSM303_READ (0x01) 00028 /*=========================================================================*/ 00029 00030 /*========================================================================= 00031 REGISTERS 00032 -----------------------------------------------------------------------*/ 00033 typedef enum 00034 { // DEFAULT TYPE 00035 LSM303_REGISTER_ACCEL_CTRL_REG1_A = 0x20, // 00000111 rw 00036 LSM303_REGISTER_ACCEL_CTRL_REG2_A = 0x21, // 00000000 rw 00037 LSM303_REGISTER_ACCEL_CTRL_REG3_A = 0x22, // 00000000 rw 00038 LSM303_REGISTER_ACCEL_CTRL_REG4_A = 0x23, // 00000000 rw 00039 LSM303_REGISTER_ACCEL_CTRL_REG5_A = 0x24, // 00000000 rw 00040 LSM303_REGISTER_ACCEL_CTRL_REG6_A = 0x25, // 00000000 rw 00041 LSM303_REGISTER_ACCEL_REFERENCE_A = 0x26, // 00000000 r 00042 LSM303_REGISTER_ACCEL_STATUS_REG_A = 0x27, // 00000000 r 00043 LSM303_REGISTER_ACCEL_OUT_X_L_A = 0x28, 00044 LSM303_REGISTER_ACCEL_OUT_X_H_A = 0x29, 00045 LSM303_REGISTER_ACCEL_OUT_Y_L_A = 0x2A, 00046 LSM303_REGISTER_ACCEL_OUT_Y_H_A = 0x2B, 00047 LSM303_REGISTER_ACCEL_OUT_Z_L_A = 0x2C, 00048 LSM303_REGISTER_ACCEL_OUT_Z_H_A = 0x2D, 00049 LSM303_REGISTER_ACCEL_FIFO_CTRL_REG_A = 0x2E, 00050 LSM303_REGISTER_ACCEL_FIFO_SRC_REG_A = 0x2F, 00051 LSM303_REGISTER_ACCEL_INT1_CFG_A = 0x30, 00052 LSM303_REGISTER_ACCEL_INT1_SOURCE_A = 0x31, 00053 LSM303_REGISTER_ACCEL_INT1_THS_A = 0x32, 00054 LSM303_REGISTER_ACCEL_INT1_DURATION_A = 0x33, 00055 LSM303_REGISTER_ACCEL_INT2_CFG_A = 0x34, 00056 LSM303_REGISTER_ACCEL_INT2_SOURCE_A = 0x35, 00057 LSM303_REGISTER_ACCEL_INT2_THS_A = 0x36, 00058 LSM303_REGISTER_ACCEL_INT2_DURATION_A = 0x37, 00059 LSM303_REGISTER_ACCEL_CLICK_CFG_A = 0x38, 00060 LSM303_REGISTER_ACCEL_CLICK_SRC_A = 0x39, 00061 LSM303_REGISTER_ACCEL_CLICK_THS_A = 0x3A, 00062 LSM303_REGISTER_ACCEL_TIME_LIMIT_A = 0x3B, 00063 LSM303_REGISTER_ACCEL_TIME_LATENCY_A = 0x3C, 00064 LSM303_REGISTER_ACCEL_TIME_WINDOW_A = 0x3D 00065 } lsm303AccelRegisters_t; 00066 00067 typedef enum 00068 { 00069 LSM303_REGISTER_MAG_CRA_REG_M = 0x00, 00070 LSM303_REGISTER_MAG_CRB_REG_M = 0x01, 00071 LSM303_REGISTER_MAG_MR_REG_M = 0x02, 00072 LSM303_REGISTER_MAG_OUT_X_H_M = 0x03, 00073 LSM303_REGISTER_MAG_OUT_X_L_M = 0x04, 00074 LSM303_REGISTER_MAG_OUT_Z_H_M = 0x05, 00075 LSM303_REGISTER_MAG_OUT_Z_L_M = 0x06, 00076 LSM303_REGISTER_MAG_OUT_Y_H_M = 0x07, 00077 LSM303_REGISTER_MAG_OUT_Y_L_M = 0x08, 00078 LSM303_REGISTER_MAG_SR_REG_Mg = 0x09, 00079 LSM303_REGISTER_MAG_IRA_REG_M = 0x0A, 00080 LSM303_REGISTER_MAG_IRB_REG_M = 0x0B, 00081 LSM303_REGISTER_MAG_IRC_REG_M = 0x0C, 00082 LSM303_REGISTER_MAG_TEMP_OUT_H_M = 0x31, 00083 LSM303_REGISTER_MAG_TEMP_OUT_L_M = 0x32 00084 } lsm303MagRegisters_t; 00085 /*=========================================================================*/ 00086 00087 /*========================================================================= 00088 MAGNETOMETER GAIN SETTINGS 00089 -----------------------------------------------------------------------*/ 00090 typedef enum 00091 { 00092 LSM303_MAGGAIN_1_3 = 0x20, // +/- 1.3 00093 LSM303_MAGGAIN_1_9 = 0x40, // +/- 1.9 00094 LSM303_MAGGAIN_2_5 = 0x60, // +/- 2.5 00095 LSM303_MAGGAIN_4_0 = 0x80, // +/- 4.0 00096 LSM303_MAGGAIN_4_7 = 0xA0, // +/- 4.7 00097 LSM303_MAGGAIN_5_6 = 0xC0, // +/- 5.6 00098 LSM303_MAGGAIN_8_1 = 0xE0 // +/- 8.1 00099 } lsm303MagGain; 00100 /*=========================================================================*/ 00101 00102 /*========================================================================= 00103 MAGNETOMETER UPDATE RATE SETTINGS 00104 -----------------------------------------------------------------------*/ 00105 typedef enum 00106 { 00107 LSM303_MAGRATE_0_7 = 0x00, // 0.75 Hz 00108 LSM303_MAGRATE_1_5 = 0x01, // 1.5 Hz 00109 LSM303_MAGRATE_3_0 = 0x62, // 3.0 Hz 00110 LSM303_MAGRATE_7_5 = 0x03, // 7.5 Hz 00111 LSM303_MAGRATE_15 = 0x04, // 15 Hz 00112 LSM303_MAGRATE_30 = 0x05, // 30 Hz 00113 LSM303_MAGRATE_75 = 0x06, // 75 Hz 00114 LSM303_MAGRATE_220 = 0x07 // 200 Hz 00115 } lsm303MagRate; 00116 /*=========================================================================*/ 00117 00118 /*========================================================================= 00119 INTERNAL MAGNETOMETER DATA TYPE 00120 -----------------------------------------------------------------------*/ 00121 typedef struct lsm303MagData_s 00122 { 00123 float x; 00124 float y; 00125 float z; 00126 float orientation; 00127 } lsm303MagData; 00128 /*=========================================================================*/ 00129 00130 /*========================================================================= 00131 INTERNAL ACCELERATION DATA TYPE 00132 -----------------------------------------------------------------------*/ 00133 typedef struct lsm303AccelData_s 00134 { 00135 float x; 00136 float y; 00137 float z; 00138 } lsm303AccelData; 00139 /*=========================================================================*/ 00140 00141 /*========================================================================= 00142 CHIP ID 00143 -----------------------------------------------------------------------*/ 00144 #define LSM303_ID (0b11010100) 00145 /*=========================================================================*/ 00146 00147 /* Unified sensor driver for the accelerometer */ 00148 class Adafruit_LSM303_Accel_Unified// : public Adafruit_Sensor 00149 { 00150 public: 00151 Adafruit_LSM303_Accel_Unified(int32_t sensorID = -1); 00152 00153 bool begin(void); 00154 bool getEvent(sensors_event_t*); 00155 void getSensor(sensor_t*); 00156 00157 private: 00158 lsm303AccelData _accelData; // Last read accelerometer data will be available here 00159 int32_t _sensorID; 00160 00161 void write8(byte address, byte reg, byte value); 00162 byte read8(byte address, byte reg); 00163 void read(void); 00164 }; 00165 00166 /* Unified sensor driver for the magnetometer */ 00167 class Adafruit_LSM303_Mag_Unified //: public Adafruit_Sensor 00168 { 00169 public: 00170 Adafruit_LSM303_Mag_Unified(int32_t sensorID = -1); 00171 00172 bool begin(void); 00173 void enableAutoRange(bool enable); 00174 void setMagGain(lsm303MagGain gain); 00175 void setMagRate(lsm303MagRate rate); 00176 bool getEvent(sensors_event_t*); 00177 void getSensor(sensor_t*); 00178 00179 private: 00180 lsm303MagGain _magGain; 00181 lsm303MagData _magData; // Last read magnetometer data will be available here 00182 int32_t _sensorID; 00183 bool _autoRangeEnabled; 00184 00185 void write8(byte address, byte reg, byte value); 00186 byte read8(byte address, byte reg); 00187 void read(void); 00188 }; 00189 00190 #endif 00191
Generated on Tue Jul 12 2022 19:53:07 by 1.7.2