Shadow Robot Distance Measurement with Bluetooth Code

Dependencies:   4DGL-uLCD-SE HALLFX_ENCODER Motor mbed-rtos mbed

Fork of rtos_mutex by mbed official

Committer:
vikram3
Date:
Tue Mar 14 14:51:26 2017 +0000
Revision:
9:8e1702463051
Parent:
8:0a2509a0b871
Shadow Robot Code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vikram3 8:0a2509a0b871 1 /******************************************************************************
vikram3 8:0a2509a0b871 2 LSM9DS1_Types.h
vikram3 8:0a2509a0b871 3 SFE_LSM9DS1 Library - LSM9DS1 Types and Enumerations
vikram3 8:0a2509a0b871 4 Jim Lindblom @ SparkFun Electronics
vikram3 8:0a2509a0b871 5 Original Creation Date: April 21, 2015
vikram3 8:0a2509a0b871 6 https://github.com/sparkfun/LSM9DS1_Breakout
vikram3 8:0a2509a0b871 7
vikram3 8:0a2509a0b871 8 This file defines all types and enumerations used by the LSM9DS1 class.
vikram3 8:0a2509a0b871 9
vikram3 8:0a2509a0b871 10 Development environment specifics:
vikram3 8:0a2509a0b871 11 IDE: Arduino 1.6.0
vikram3 8:0a2509a0b871 12 Hardware Platform: Arduino Uno
vikram3 8:0a2509a0b871 13 LSM9DS1 Breakout Version: 1.0
vikram3 8:0a2509a0b871 14
vikram3 8:0a2509a0b871 15 This code is beerware; if you see me (or any other SparkFun employee) at the
vikram3 8:0a2509a0b871 16 local, and you've found our code helpful, please buy us a round!
vikram3 8:0a2509a0b871 17
vikram3 8:0a2509a0b871 18 Distributed as-is; no warranty is given.
vikram3 8:0a2509a0b871 19 ******************************************************************************/
vikram3 8:0a2509a0b871 20
vikram3 8:0a2509a0b871 21 #ifndef __LSM9DS1_Types_H__
vikram3 8:0a2509a0b871 22 #define __LSM9DS1_Types_H__
vikram3 8:0a2509a0b871 23
vikram3 8:0a2509a0b871 24 #include "LSM9DS1_Registers.h"
vikram3 8:0a2509a0b871 25
vikram3 8:0a2509a0b871 26 // The LSM9DS1 functions over both I2C or SPI. This library supports both.
vikram3 8:0a2509a0b871 27 // But the interface mode used must be sent to the LSM9DS1 constructor. Use
vikram3 8:0a2509a0b871 28 // one of these two as the first parameter of the constructor.
vikram3 8:0a2509a0b871 29 enum interface_mode
vikram3 8:0a2509a0b871 30 {
vikram3 8:0a2509a0b871 31 IMU_MODE_SPI,
vikram3 8:0a2509a0b871 32 IMU_MODE_I2C,
vikram3 8:0a2509a0b871 33 };
vikram3 8:0a2509a0b871 34
vikram3 8:0a2509a0b871 35 // accel_scale defines all possible FSR's of the accelerometer:
vikram3 8:0a2509a0b871 36 enum accel_scale
vikram3 8:0a2509a0b871 37 {
vikram3 8:0a2509a0b871 38 A_SCALE_2G, // 00: 2g
vikram3 8:0a2509a0b871 39 A_SCALE_16G,// 01: 16g
vikram3 8:0a2509a0b871 40 A_SCALE_4G, // 10: 4g
vikram3 8:0a2509a0b871 41 A_SCALE_8G // 11: 8g
vikram3 8:0a2509a0b871 42 };
vikram3 8:0a2509a0b871 43
vikram3 8:0a2509a0b871 44 // gyro_scale defines the possible full-scale ranges of the gyroscope:
vikram3 8:0a2509a0b871 45 enum gyro_scale
vikram3 8:0a2509a0b871 46 {
vikram3 8:0a2509a0b871 47 G_SCALE_245DPS, // 00: 245 degrees per second
vikram3 8:0a2509a0b871 48 G_SCALE_500DPS, // 01: 500 dps
vikram3 8:0a2509a0b871 49 G_SCALE_2000DPS, // 11: 2000 dps
vikram3 8:0a2509a0b871 50 };
vikram3 8:0a2509a0b871 51
vikram3 8:0a2509a0b871 52 // mag_scale defines all possible FSR's of the magnetometer:
vikram3 8:0a2509a0b871 53 enum mag_scale
vikram3 8:0a2509a0b871 54 {
vikram3 8:0a2509a0b871 55 M_SCALE_4GS, // 00: 4Gs
vikram3 8:0a2509a0b871 56 M_SCALE_8GS, // 01: 8Gs
vikram3 8:0a2509a0b871 57 M_SCALE_12GS, // 10: 12Gs
vikram3 8:0a2509a0b871 58 M_SCALE_16GS, // 11: 16Gs
vikram3 8:0a2509a0b871 59 };
vikram3 8:0a2509a0b871 60
vikram3 8:0a2509a0b871 61 // gyro_odr defines all possible data rate/bandwidth combos of the gyro:
vikram3 8:0a2509a0b871 62 enum gyro_odr
vikram3 8:0a2509a0b871 63 {
vikram3 8:0a2509a0b871 64 //! TODO
vikram3 8:0a2509a0b871 65 G_ODR_PD, // Power down (0)
vikram3 8:0a2509a0b871 66 G_ODR_149, // 14.9 Hz (1)
vikram3 8:0a2509a0b871 67 G_ODR_595, // 59.5 Hz (2)
vikram3 8:0a2509a0b871 68 G_ODR_119, // 119 Hz (3)
vikram3 8:0a2509a0b871 69 G_ODR_238, // 238 Hz (4)
vikram3 8:0a2509a0b871 70 G_ODR_476, // 476 Hz (5)
vikram3 8:0a2509a0b871 71 G_ODR_952 // 952 Hz (6)
vikram3 8:0a2509a0b871 72 };
vikram3 8:0a2509a0b871 73 // accel_oder defines all possible output data rates of the accelerometer:
vikram3 8:0a2509a0b871 74 enum accel_odr
vikram3 8:0a2509a0b871 75 {
vikram3 8:0a2509a0b871 76 XL_POWER_DOWN, // Power-down mode (0x0)
vikram3 8:0a2509a0b871 77 XL_ODR_10, // 10 Hz (0x1)
vikram3 8:0a2509a0b871 78 XL_ODR_50, // 50 Hz (0x02)
vikram3 8:0a2509a0b871 79 XL_ODR_119, // 119 Hz (0x3)
vikram3 8:0a2509a0b871 80 XL_ODR_238, // 238 Hz (0x4)
vikram3 8:0a2509a0b871 81 XL_ODR_476, // 476 Hz (0x5)
vikram3 8:0a2509a0b871 82 XL_ODR_952 // 952 Hz (0x6)
vikram3 8:0a2509a0b871 83 };
vikram3 8:0a2509a0b871 84
vikram3 8:0a2509a0b871 85 // accel_abw defines all possible anti-aliasing filter rates of the accelerometer:
vikram3 8:0a2509a0b871 86 enum accel_abw
vikram3 8:0a2509a0b871 87 {
vikram3 8:0a2509a0b871 88 A_ABW_408, // 408 Hz (0x0)
vikram3 8:0a2509a0b871 89 A_ABW_211, // 211 Hz (0x1)
vikram3 8:0a2509a0b871 90 A_ABW_105, // 105 Hz (0x2)
vikram3 8:0a2509a0b871 91 A_ABW_50, // 50 Hz (0x3)
vikram3 8:0a2509a0b871 92 };
vikram3 8:0a2509a0b871 93
vikram3 8:0a2509a0b871 94
vikram3 8:0a2509a0b871 95 // mag_odr defines all possible output data rates of the magnetometer:
vikram3 8:0a2509a0b871 96 enum mag_odr
vikram3 8:0a2509a0b871 97 {
vikram3 8:0a2509a0b871 98 M_ODR_0625, // 0.625 Hz (0)
vikram3 8:0a2509a0b871 99 M_ODR_125, // 1.25 Hz (1)
vikram3 8:0a2509a0b871 100 M_ODR_250, // 2.5 Hz (2)
vikram3 8:0a2509a0b871 101 M_ODR_5, // 5 Hz (3)
vikram3 8:0a2509a0b871 102 M_ODR_10, // 10 Hz (4)
vikram3 8:0a2509a0b871 103 M_ODR_20, // 20 Hz (5)
vikram3 8:0a2509a0b871 104 M_ODR_40, // 40 Hz (6)
vikram3 8:0a2509a0b871 105 M_ODR_80 // 80 Hz (7)
vikram3 8:0a2509a0b871 106 };
vikram3 8:0a2509a0b871 107
vikram3 8:0a2509a0b871 108 enum interrupt_select
vikram3 8:0a2509a0b871 109 {
vikram3 8:0a2509a0b871 110 XG_INT1 = INT1_CTRL,
vikram3 8:0a2509a0b871 111 XG_INT2 = INT2_CTRL
vikram3 8:0a2509a0b871 112 };
vikram3 8:0a2509a0b871 113
vikram3 8:0a2509a0b871 114 enum interrupt_generators
vikram3 8:0a2509a0b871 115 {
vikram3 8:0a2509a0b871 116 INT_DRDY_XL = (1<<0), // Accelerometer data ready (INT1 & INT2)
vikram3 8:0a2509a0b871 117 INT_DRDY_G = (1<<1), // Gyroscope data ready (INT1 & INT2)
vikram3 8:0a2509a0b871 118 INT1_BOOT = (1<<2), // Boot status (INT1)
vikram3 8:0a2509a0b871 119 INT2_DRDY_TEMP = (1<<2),// Temp data ready (INT2)
vikram3 8:0a2509a0b871 120 INT_FTH = (1<<3), // FIFO threshold interrupt (INT1 & INT2)
vikram3 8:0a2509a0b871 121 INT_OVR = (1<<4), // Overrun interrupt (INT1 & INT2)
vikram3 8:0a2509a0b871 122 INT_FSS5 = (1<<5), // FSS5 interrupt (INT1 & INT2)
vikram3 8:0a2509a0b871 123 INT_IG_XL = (1<<6), // Accel interrupt generator (INT1)
vikram3 8:0a2509a0b871 124 INT1_IG_G = (1<<7), // Gyro interrupt enable (INT1)
vikram3 8:0a2509a0b871 125 INT2_INACT = (1<<7), // Inactivity interrupt output (INT2)
vikram3 8:0a2509a0b871 126 };
vikram3 8:0a2509a0b871 127
vikram3 8:0a2509a0b871 128 enum accel_interrupt_generator
vikram3 8:0a2509a0b871 129 {
vikram3 8:0a2509a0b871 130 XLIE_XL = (1<<0),
vikram3 8:0a2509a0b871 131 XHIE_XL = (1<<1),
vikram3 8:0a2509a0b871 132 YLIE_XL = (1<<2),
vikram3 8:0a2509a0b871 133 YHIE_XL = (1<<3),
vikram3 8:0a2509a0b871 134 ZLIE_XL = (1<<4),
vikram3 8:0a2509a0b871 135 ZHIE_XL = (1<<5),
vikram3 8:0a2509a0b871 136 GEN_6D = (1<<6)
vikram3 8:0a2509a0b871 137 };
vikram3 8:0a2509a0b871 138
vikram3 8:0a2509a0b871 139 enum gyro_interrupt_generator
vikram3 8:0a2509a0b871 140 {
vikram3 8:0a2509a0b871 141 XLIE_G = (1<<0),
vikram3 8:0a2509a0b871 142 XHIE_G = (1<<1),
vikram3 8:0a2509a0b871 143 YLIE_G = (1<<2),
vikram3 8:0a2509a0b871 144 YHIE_G = (1<<3),
vikram3 8:0a2509a0b871 145 ZLIE_G = (1<<4),
vikram3 8:0a2509a0b871 146 ZHIE_G = (1<<5)
vikram3 8:0a2509a0b871 147 };
vikram3 8:0a2509a0b871 148
vikram3 8:0a2509a0b871 149 enum mag_interrupt_generator
vikram3 8:0a2509a0b871 150 {
vikram3 8:0a2509a0b871 151 ZIEN = (1<<5),
vikram3 8:0a2509a0b871 152 YIEN = (1<<6),
vikram3 8:0a2509a0b871 153 XIEN = (1<<7)
vikram3 8:0a2509a0b871 154 };
vikram3 8:0a2509a0b871 155
vikram3 8:0a2509a0b871 156 enum h_lactive
vikram3 8:0a2509a0b871 157 {
vikram3 8:0a2509a0b871 158 INT_ACTIVE_HIGH,
vikram3 8:0a2509a0b871 159 INT_ACTIVE_LOW
vikram3 8:0a2509a0b871 160 };
vikram3 8:0a2509a0b871 161
vikram3 8:0a2509a0b871 162 enum pp_od
vikram3 8:0a2509a0b871 163 {
vikram3 8:0a2509a0b871 164 INT_PUSH_PULL,
vikram3 8:0a2509a0b871 165 INT_OPEN_DRAIN
vikram3 8:0a2509a0b871 166 };
vikram3 8:0a2509a0b871 167
vikram3 8:0a2509a0b871 168 enum fifoMode_type
vikram3 8:0a2509a0b871 169 {
vikram3 8:0a2509a0b871 170 FIFO_OFF = 0,
vikram3 8:0a2509a0b871 171 FIFO_THS = 1,
vikram3 8:0a2509a0b871 172 FIFO_CONT_TRIGGER = 3,
vikram3 8:0a2509a0b871 173 FIFO_OFF_TRIGGER = 4,
vikram3 8:0a2509a0b871 174 FIFO_CONT = 5
vikram3 8:0a2509a0b871 175 };
vikram3 8:0a2509a0b871 176
vikram3 8:0a2509a0b871 177 struct gyroSettings
vikram3 8:0a2509a0b871 178 {
vikram3 8:0a2509a0b871 179 // Gyroscope settings:
vikram3 8:0a2509a0b871 180 uint8_t enabled;
vikram3 8:0a2509a0b871 181 uint16_t scale; // Changed this to 16-bit
vikram3 8:0a2509a0b871 182 uint8_t sampleRate;
vikram3 8:0a2509a0b871 183 // New gyro stuff:
vikram3 8:0a2509a0b871 184 uint8_t bandwidth;
vikram3 8:0a2509a0b871 185 uint8_t lowPowerEnable;
vikram3 8:0a2509a0b871 186 uint8_t HPFEnable;
vikram3 8:0a2509a0b871 187 uint8_t HPFCutoff;
vikram3 8:0a2509a0b871 188 uint8_t flipX;
vikram3 8:0a2509a0b871 189 uint8_t flipY;
vikram3 8:0a2509a0b871 190 uint8_t flipZ;
vikram3 8:0a2509a0b871 191 uint8_t orientation;
vikram3 8:0a2509a0b871 192 uint8_t enableX;
vikram3 8:0a2509a0b871 193 uint8_t enableY;
vikram3 8:0a2509a0b871 194 uint8_t enableZ;
vikram3 8:0a2509a0b871 195 uint8_t latchInterrupt;
vikram3 8:0a2509a0b871 196 };
vikram3 8:0a2509a0b871 197
vikram3 8:0a2509a0b871 198 struct deviceSettings
vikram3 8:0a2509a0b871 199 {
vikram3 8:0a2509a0b871 200 uint8_t commInterface; // Can be I2C, SPI 4-wire or SPI 3-wire
vikram3 8:0a2509a0b871 201 uint8_t agAddress; // I2C address or SPI CS pin
vikram3 8:0a2509a0b871 202 uint8_t mAddress; // I2C address or SPI CS pin
vikram3 8:0a2509a0b871 203 };
vikram3 8:0a2509a0b871 204
vikram3 8:0a2509a0b871 205 struct accelSettings
vikram3 8:0a2509a0b871 206 {
vikram3 8:0a2509a0b871 207 // Accelerometer settings:
vikram3 8:0a2509a0b871 208 uint8_t enabled;
vikram3 8:0a2509a0b871 209 uint8_t scale;
vikram3 8:0a2509a0b871 210 uint8_t sampleRate;
vikram3 8:0a2509a0b871 211 // New accel stuff:
vikram3 8:0a2509a0b871 212 uint8_t enableX;
vikram3 8:0a2509a0b871 213 uint8_t enableY;
vikram3 8:0a2509a0b871 214 uint8_t enableZ;
vikram3 8:0a2509a0b871 215 int8_t bandwidth;
vikram3 8:0a2509a0b871 216 uint8_t highResEnable;
vikram3 8:0a2509a0b871 217 uint8_t highResBandwidth;
vikram3 8:0a2509a0b871 218 };
vikram3 8:0a2509a0b871 219
vikram3 8:0a2509a0b871 220 struct magSettings
vikram3 8:0a2509a0b871 221 {
vikram3 8:0a2509a0b871 222 // Magnetometer settings:
vikram3 8:0a2509a0b871 223 uint8_t enabled;
vikram3 8:0a2509a0b871 224 uint8_t scale;
vikram3 8:0a2509a0b871 225 uint8_t sampleRate;
vikram3 8:0a2509a0b871 226 // New mag stuff:
vikram3 8:0a2509a0b871 227 uint8_t tempCompensationEnable;
vikram3 8:0a2509a0b871 228 uint8_t XYPerformance;
vikram3 8:0a2509a0b871 229 uint8_t ZPerformance;
vikram3 8:0a2509a0b871 230 uint8_t lowPowerEnable;
vikram3 8:0a2509a0b871 231 uint8_t operatingMode;
vikram3 8:0a2509a0b871 232 };
vikram3 8:0a2509a0b871 233
vikram3 8:0a2509a0b871 234 struct temperatureSettings
vikram3 8:0a2509a0b871 235 {
vikram3 8:0a2509a0b871 236 // Temperature settings
vikram3 8:0a2509a0b871 237 uint8_t enabled;
vikram3 8:0a2509a0b871 238 };
vikram3 8:0a2509a0b871 239
vikram3 8:0a2509a0b871 240 struct IMUSettings
vikram3 8:0a2509a0b871 241 {
vikram3 8:0a2509a0b871 242 deviceSettings device;
vikram3 8:0a2509a0b871 243
vikram3 8:0a2509a0b871 244 gyroSettings gyro;
vikram3 8:0a2509a0b871 245 accelSettings accel;
vikram3 8:0a2509a0b871 246 magSettings mag;
vikram3 8:0a2509a0b871 247
vikram3 8:0a2509a0b871 248 temperatureSettings temp;
vikram3 8:0a2509a0b871 249 };
vikram3 8:0a2509a0b871 250
vikram3 8:0a2509a0b871 251 #endif