Dodging asteroids game.

Dependencies:   4DGL-uLCD-SE PinDetect SDFileSystem mbed wave_player

Committer:
dylanslack
Date:
Mon Mar 14 03:08:37 2016 +0000
Revision:
0:3f73e98442ec
Initial commit

Who changed what in which revision?

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