Modified to run on Renesas GR Peach board
Dependencies: EthernetInterface HTTP-Server Webpage mbed-rpc mbed-src
Fork of HTTPServer_echoback by
Adafruit_10DOF/Adafruit_LSM303_U.h@16:5d102be2566c, 2015-10-07 (annotated)
- Committer:
- webOnBoard
- Date:
- Wed Oct 07 20:42:51 2015 +0000
- Revision:
- 16:5d102be2566c
web based AHRS demo Renesas GR Peach board; Using HTTP Server/RPC Adafruit 10DOF
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
webOnBoard | 16:5d102be2566c | 1 | /*************************************************************************** |
webOnBoard | 16:5d102be2566c | 2 | This is a library for the LSM303 Accelerometer and magnentometer/compass |
webOnBoard | 16:5d102be2566c | 3 | |
webOnBoard | 16:5d102be2566c | 4 | Designed specifically to work with the Adafruit LSM303DLHC Breakout |
webOnBoard | 16:5d102be2566c | 5 | |
webOnBoard | 16:5d102be2566c | 6 | These displays use I2C to communicate, 2 pins are required to interface. |
webOnBoard | 16:5d102be2566c | 7 | |
webOnBoard | 16:5d102be2566c | 8 | Adafruit invests time and resources providing this open source code, |
webOnBoard | 16:5d102be2566c | 9 | please support Adafruit andopen-source hardware by purchasing products |
webOnBoard | 16:5d102be2566c | 10 | from Adafruit! |
webOnBoard | 16:5d102be2566c | 11 | |
webOnBoard | 16:5d102be2566c | 12 | Written by Kevin Townsend for Adafruit Industries. |
webOnBoard | 16:5d102be2566c | 13 | BSD license, all text above must be included in any redistribution |
webOnBoard | 16:5d102be2566c | 14 | ***************************************************************************/ |
webOnBoard | 16:5d102be2566c | 15 | #ifndef __LSM303_H__ |
webOnBoard | 16:5d102be2566c | 16 | #define __LSM303_H__ |
webOnBoard | 16:5d102be2566c | 17 | |
webOnBoard | 16:5d102be2566c | 18 | #include <Adafruit_Sensor.h> |
webOnBoard | 16:5d102be2566c | 19 | |
webOnBoard | 16:5d102be2566c | 20 | |
webOnBoard | 16:5d102be2566c | 21 | /*========================================================================= |
webOnBoard | 16:5d102be2566c | 22 | I2C ADDRESS/BITS |
webOnBoard | 16:5d102be2566c | 23 | -----------------------------------------------------------------------*/ |
webOnBoard | 16:5d102be2566c | 24 | #define LSM303_ADDRESS_ACCEL (0x32)// >> 1) // 0011001x |
webOnBoard | 16:5d102be2566c | 25 | #define LSM303_ADDRESS_MAG (0x3C)// >> 1) // 0011110x |
webOnBoard | 16:5d102be2566c | 26 | #define LSM303_WRITE (0x00) |
webOnBoard | 16:5d102be2566c | 27 | #define LSM303_READ (0x01) |
webOnBoard | 16:5d102be2566c | 28 | /*=========================================================================*/ |
webOnBoard | 16:5d102be2566c | 29 | |
webOnBoard | 16:5d102be2566c | 30 | /*========================================================================= |
webOnBoard | 16:5d102be2566c | 31 | REGISTERS |
webOnBoard | 16:5d102be2566c | 32 | -----------------------------------------------------------------------*/ |
webOnBoard | 16:5d102be2566c | 33 | typedef enum |
webOnBoard | 16:5d102be2566c | 34 | { // DEFAULT TYPE |
webOnBoard | 16:5d102be2566c | 35 | LSM303_REGISTER_ACCEL_CTRL_REG1_A = 0x20, // 00000111 rw |
webOnBoard | 16:5d102be2566c | 36 | LSM303_REGISTER_ACCEL_CTRL_REG2_A = 0x21, // 00000000 rw |
webOnBoard | 16:5d102be2566c | 37 | LSM303_REGISTER_ACCEL_CTRL_REG3_A = 0x22, // 00000000 rw |
webOnBoard | 16:5d102be2566c | 38 | LSM303_REGISTER_ACCEL_CTRL_REG4_A = 0x23, // 00000000 rw |
webOnBoard | 16:5d102be2566c | 39 | LSM303_REGISTER_ACCEL_CTRL_REG5_A = 0x24, // 00000000 rw |
webOnBoard | 16:5d102be2566c | 40 | LSM303_REGISTER_ACCEL_CTRL_REG6_A = 0x25, // 00000000 rw |
webOnBoard | 16:5d102be2566c | 41 | LSM303_REGISTER_ACCEL_REFERENCE_A = 0x26, // 00000000 r |
webOnBoard | 16:5d102be2566c | 42 | LSM303_REGISTER_ACCEL_STATUS_REG_A = 0x27, // 00000000 r |
webOnBoard | 16:5d102be2566c | 43 | LSM303_REGISTER_ACCEL_OUT_X_L_A = 0x28, |
webOnBoard | 16:5d102be2566c | 44 | LSM303_REGISTER_ACCEL_OUT_X_H_A = 0x29, |
webOnBoard | 16:5d102be2566c | 45 | LSM303_REGISTER_ACCEL_OUT_Y_L_A = 0x2A, |
webOnBoard | 16:5d102be2566c | 46 | LSM303_REGISTER_ACCEL_OUT_Y_H_A = 0x2B, |
webOnBoard | 16:5d102be2566c | 47 | LSM303_REGISTER_ACCEL_OUT_Z_L_A = 0x2C, |
webOnBoard | 16:5d102be2566c | 48 | LSM303_REGISTER_ACCEL_OUT_Z_H_A = 0x2D, |
webOnBoard | 16:5d102be2566c | 49 | LSM303_REGISTER_ACCEL_FIFO_CTRL_REG_A = 0x2E, |
webOnBoard | 16:5d102be2566c | 50 | LSM303_REGISTER_ACCEL_FIFO_SRC_REG_A = 0x2F, |
webOnBoard | 16:5d102be2566c | 51 | LSM303_REGISTER_ACCEL_INT1_CFG_A = 0x30, |
webOnBoard | 16:5d102be2566c | 52 | LSM303_REGISTER_ACCEL_INT1_SOURCE_A = 0x31, |
webOnBoard | 16:5d102be2566c | 53 | LSM303_REGISTER_ACCEL_INT1_THS_A = 0x32, |
webOnBoard | 16:5d102be2566c | 54 | LSM303_REGISTER_ACCEL_INT1_DURATION_A = 0x33, |
webOnBoard | 16:5d102be2566c | 55 | LSM303_REGISTER_ACCEL_INT2_CFG_A = 0x34, |
webOnBoard | 16:5d102be2566c | 56 | LSM303_REGISTER_ACCEL_INT2_SOURCE_A = 0x35, |
webOnBoard | 16:5d102be2566c | 57 | LSM303_REGISTER_ACCEL_INT2_THS_A = 0x36, |
webOnBoard | 16:5d102be2566c | 58 | LSM303_REGISTER_ACCEL_INT2_DURATION_A = 0x37, |
webOnBoard | 16:5d102be2566c | 59 | LSM303_REGISTER_ACCEL_CLICK_CFG_A = 0x38, |
webOnBoard | 16:5d102be2566c | 60 | LSM303_REGISTER_ACCEL_CLICK_SRC_A = 0x39, |
webOnBoard | 16:5d102be2566c | 61 | LSM303_REGISTER_ACCEL_CLICK_THS_A = 0x3A, |
webOnBoard | 16:5d102be2566c | 62 | LSM303_REGISTER_ACCEL_TIME_LIMIT_A = 0x3B, |
webOnBoard | 16:5d102be2566c | 63 | LSM303_REGISTER_ACCEL_TIME_LATENCY_A = 0x3C, |
webOnBoard | 16:5d102be2566c | 64 | LSM303_REGISTER_ACCEL_TIME_WINDOW_A = 0x3D |
webOnBoard | 16:5d102be2566c | 65 | } lsm303AccelRegisters_t; |
webOnBoard | 16:5d102be2566c | 66 | |
webOnBoard | 16:5d102be2566c | 67 | typedef enum |
webOnBoard | 16:5d102be2566c | 68 | { |
webOnBoard | 16:5d102be2566c | 69 | LSM303_REGISTER_MAG_CRA_REG_M = 0x00, |
webOnBoard | 16:5d102be2566c | 70 | LSM303_REGISTER_MAG_CRB_REG_M = 0x01, |
webOnBoard | 16:5d102be2566c | 71 | LSM303_REGISTER_MAG_MR_REG_M = 0x02, |
webOnBoard | 16:5d102be2566c | 72 | LSM303_REGISTER_MAG_OUT_X_H_M = 0x03, |
webOnBoard | 16:5d102be2566c | 73 | LSM303_REGISTER_MAG_OUT_X_L_M = 0x04, |
webOnBoard | 16:5d102be2566c | 74 | LSM303_REGISTER_MAG_OUT_Z_H_M = 0x05, |
webOnBoard | 16:5d102be2566c | 75 | LSM303_REGISTER_MAG_OUT_Z_L_M = 0x06, |
webOnBoard | 16:5d102be2566c | 76 | LSM303_REGISTER_MAG_OUT_Y_H_M = 0x07, |
webOnBoard | 16:5d102be2566c | 77 | LSM303_REGISTER_MAG_OUT_Y_L_M = 0x08, |
webOnBoard | 16:5d102be2566c | 78 | LSM303_REGISTER_MAG_SR_REG_Mg = 0x09, |
webOnBoard | 16:5d102be2566c | 79 | LSM303_REGISTER_MAG_IRA_REG_M = 0x0A, |
webOnBoard | 16:5d102be2566c | 80 | LSM303_REGISTER_MAG_IRB_REG_M = 0x0B, |
webOnBoard | 16:5d102be2566c | 81 | LSM303_REGISTER_MAG_IRC_REG_M = 0x0C, |
webOnBoard | 16:5d102be2566c | 82 | LSM303_REGISTER_MAG_TEMP_OUT_H_M = 0x31, |
webOnBoard | 16:5d102be2566c | 83 | LSM303_REGISTER_MAG_TEMP_OUT_L_M = 0x32 |
webOnBoard | 16:5d102be2566c | 84 | } lsm303MagRegisters_t; |
webOnBoard | 16:5d102be2566c | 85 | /*=========================================================================*/ |
webOnBoard | 16:5d102be2566c | 86 | |
webOnBoard | 16:5d102be2566c | 87 | /*========================================================================= |
webOnBoard | 16:5d102be2566c | 88 | MAGNETOMETER GAIN SETTINGS |
webOnBoard | 16:5d102be2566c | 89 | -----------------------------------------------------------------------*/ |
webOnBoard | 16:5d102be2566c | 90 | typedef enum |
webOnBoard | 16:5d102be2566c | 91 | { |
webOnBoard | 16:5d102be2566c | 92 | LSM303_MAGGAIN_1_3 = 0x20, // +/- 1.3 |
webOnBoard | 16:5d102be2566c | 93 | LSM303_MAGGAIN_1_9 = 0x40, // +/- 1.9 |
webOnBoard | 16:5d102be2566c | 94 | LSM303_MAGGAIN_2_5 = 0x60, // +/- 2.5 |
webOnBoard | 16:5d102be2566c | 95 | LSM303_MAGGAIN_4_0 = 0x80, // +/- 4.0 |
webOnBoard | 16:5d102be2566c | 96 | LSM303_MAGGAIN_4_7 = 0xA0, // +/- 4.7 |
webOnBoard | 16:5d102be2566c | 97 | LSM303_MAGGAIN_5_6 = 0xC0, // +/- 5.6 |
webOnBoard | 16:5d102be2566c | 98 | LSM303_MAGGAIN_8_1 = 0xE0 // +/- 8.1 |
webOnBoard | 16:5d102be2566c | 99 | } lsm303MagGain; |
webOnBoard | 16:5d102be2566c | 100 | /*=========================================================================*/ |
webOnBoard | 16:5d102be2566c | 101 | |
webOnBoard | 16:5d102be2566c | 102 | /*========================================================================= |
webOnBoard | 16:5d102be2566c | 103 | MAGNETOMETER UPDATE RATE SETTINGS |
webOnBoard | 16:5d102be2566c | 104 | -----------------------------------------------------------------------*/ |
webOnBoard | 16:5d102be2566c | 105 | typedef enum |
webOnBoard | 16:5d102be2566c | 106 | { |
webOnBoard | 16:5d102be2566c | 107 | LSM303_MAGRATE_0_7 = 0x00, // 0.75 Hz |
webOnBoard | 16:5d102be2566c | 108 | LSM303_MAGRATE_1_5 = 0x01, // 1.5 Hz |
webOnBoard | 16:5d102be2566c | 109 | LSM303_MAGRATE_3_0 = 0x62, // 3.0 Hz |
webOnBoard | 16:5d102be2566c | 110 | LSM303_MAGRATE_7_5 = 0x03, // 7.5 Hz |
webOnBoard | 16:5d102be2566c | 111 | LSM303_MAGRATE_15 = 0x04, // 15 Hz |
webOnBoard | 16:5d102be2566c | 112 | LSM303_MAGRATE_30 = 0x05, // 30 Hz |
webOnBoard | 16:5d102be2566c | 113 | LSM303_MAGRATE_75 = 0x06, // 75 Hz |
webOnBoard | 16:5d102be2566c | 114 | LSM303_MAGRATE_220 = 0x07 // 200 Hz |
webOnBoard | 16:5d102be2566c | 115 | } lsm303MagRate; |
webOnBoard | 16:5d102be2566c | 116 | /*=========================================================================*/ |
webOnBoard | 16:5d102be2566c | 117 | |
webOnBoard | 16:5d102be2566c | 118 | /*========================================================================= |
webOnBoard | 16:5d102be2566c | 119 | INTERNAL MAGNETOMETER DATA TYPE |
webOnBoard | 16:5d102be2566c | 120 | -----------------------------------------------------------------------*/ |
webOnBoard | 16:5d102be2566c | 121 | typedef struct lsm303MagData_s |
webOnBoard | 16:5d102be2566c | 122 | { |
webOnBoard | 16:5d102be2566c | 123 | float x; |
webOnBoard | 16:5d102be2566c | 124 | float y; |
webOnBoard | 16:5d102be2566c | 125 | float z; |
webOnBoard | 16:5d102be2566c | 126 | float orientation; |
webOnBoard | 16:5d102be2566c | 127 | } lsm303MagData; |
webOnBoard | 16:5d102be2566c | 128 | /*=========================================================================*/ |
webOnBoard | 16:5d102be2566c | 129 | |
webOnBoard | 16:5d102be2566c | 130 | /*========================================================================= |
webOnBoard | 16:5d102be2566c | 131 | INTERNAL ACCELERATION DATA TYPE |
webOnBoard | 16:5d102be2566c | 132 | -----------------------------------------------------------------------*/ |
webOnBoard | 16:5d102be2566c | 133 | typedef struct lsm303AccelData_s |
webOnBoard | 16:5d102be2566c | 134 | { |
webOnBoard | 16:5d102be2566c | 135 | float x; |
webOnBoard | 16:5d102be2566c | 136 | float y; |
webOnBoard | 16:5d102be2566c | 137 | float z; |
webOnBoard | 16:5d102be2566c | 138 | } lsm303AccelData; |
webOnBoard | 16:5d102be2566c | 139 | /*=========================================================================*/ |
webOnBoard | 16:5d102be2566c | 140 | |
webOnBoard | 16:5d102be2566c | 141 | /*========================================================================= |
webOnBoard | 16:5d102be2566c | 142 | CHIP ID |
webOnBoard | 16:5d102be2566c | 143 | -----------------------------------------------------------------------*/ |
webOnBoard | 16:5d102be2566c | 144 | #define LSM303_ID (0b11010100) |
webOnBoard | 16:5d102be2566c | 145 | /*=========================================================================*/ |
webOnBoard | 16:5d102be2566c | 146 | |
webOnBoard | 16:5d102be2566c | 147 | /* Unified sensor driver for the accelerometer */ |
webOnBoard | 16:5d102be2566c | 148 | class Adafruit_LSM303_Accel_Unified// : public Adafruit_Sensor |
webOnBoard | 16:5d102be2566c | 149 | { |
webOnBoard | 16:5d102be2566c | 150 | public: |
webOnBoard | 16:5d102be2566c | 151 | Adafruit_LSM303_Accel_Unified(int32_t sensorID = -1); |
webOnBoard | 16:5d102be2566c | 152 | |
webOnBoard | 16:5d102be2566c | 153 | bool begin(void); |
webOnBoard | 16:5d102be2566c | 154 | bool getEvent(sensors_event_t*); |
webOnBoard | 16:5d102be2566c | 155 | void getSensor(sensor_t*); |
webOnBoard | 16:5d102be2566c | 156 | |
webOnBoard | 16:5d102be2566c | 157 | private: |
webOnBoard | 16:5d102be2566c | 158 | lsm303AccelData _accelData; // Last read accelerometer data will be available here |
webOnBoard | 16:5d102be2566c | 159 | int32_t _sensorID; |
webOnBoard | 16:5d102be2566c | 160 | |
webOnBoard | 16:5d102be2566c | 161 | void write8(byte address, byte reg, byte value); |
webOnBoard | 16:5d102be2566c | 162 | byte read8(byte address, byte reg); |
webOnBoard | 16:5d102be2566c | 163 | void read(void); |
webOnBoard | 16:5d102be2566c | 164 | }; |
webOnBoard | 16:5d102be2566c | 165 | |
webOnBoard | 16:5d102be2566c | 166 | /* Unified sensor driver for the magnetometer */ |
webOnBoard | 16:5d102be2566c | 167 | class Adafruit_LSM303_Mag_Unified //: public Adafruit_Sensor |
webOnBoard | 16:5d102be2566c | 168 | { |
webOnBoard | 16:5d102be2566c | 169 | public: |
webOnBoard | 16:5d102be2566c | 170 | Adafruit_LSM303_Mag_Unified(int32_t sensorID = -1); |
webOnBoard | 16:5d102be2566c | 171 | |
webOnBoard | 16:5d102be2566c | 172 | bool begin(void); |
webOnBoard | 16:5d102be2566c | 173 | void enableAutoRange(bool enable); |
webOnBoard | 16:5d102be2566c | 174 | void setMagGain(lsm303MagGain gain); |
webOnBoard | 16:5d102be2566c | 175 | void setMagRate(lsm303MagRate rate); |
webOnBoard | 16:5d102be2566c | 176 | bool getEvent(sensors_event_t*); |
webOnBoard | 16:5d102be2566c | 177 | void getSensor(sensor_t*); |
webOnBoard | 16:5d102be2566c | 178 | |
webOnBoard | 16:5d102be2566c | 179 | private: |
webOnBoard | 16:5d102be2566c | 180 | lsm303MagGain _magGain; |
webOnBoard | 16:5d102be2566c | 181 | lsm303MagData _magData; // Last read magnetometer data will be available here |
webOnBoard | 16:5d102be2566c | 182 | int32_t _sensorID; |
webOnBoard | 16:5d102be2566c | 183 | bool _autoRangeEnabled; |
webOnBoard | 16:5d102be2566c | 184 | |
webOnBoard | 16:5d102be2566c | 185 | void write8(byte address, byte reg, byte value); |
webOnBoard | 16:5d102be2566c | 186 | byte read8(byte address, byte reg); |
webOnBoard | 16:5d102be2566c | 187 | void read(void); |
webOnBoard | 16:5d102be2566c | 188 | }; |
webOnBoard | 16:5d102be2566c | 189 | |
webOnBoard | 16:5d102be2566c | 190 | #endif |
webOnBoard | 16:5d102be2566c | 191 |