Modified to run on Renesas GR Peach board

Dependencies:   EthernetInterface HTTP-Server Webpage mbed-rpc mbed-src

Fork of HTTPServer_echoback by Takuya Urakawa

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?

UserRevisionLine numberNew 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