Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
LSM9DS1.h
00001 // Linear Acceleration: mg per LSB 00002 #define LSM9DS1_ACCEL_MG_LSB_2G (0.061F) 00003 #define LSM9DS1_ACCEL_MG_LSB_4G (0.122F) 00004 #define LSM9DS1_ACCEL_MG_LSB_8G (0.244F) 00005 #define LSM9DS1_ACCEL_MG_LSB_16G (0.732F) 00006 00007 // Magnetic Field Strength: gauss range 00008 #define LSM9DS1_MAG_MGAUSS_4GAUSS (0.14F) 00009 #define LSM9DS1_MAG_MGAUSS_8GAUSS (0.29F) 00010 #define LSM9DS1_MAG_MGAUSS_12GAUSS (0.43F) 00011 #define LSM9DS1_MAG_MGAUSS_16GAUSS (0.58F) 00012 00013 // Angular Rate: dps per LSB 00014 #define LSM9DS1_GYRO_DPS_DIGIT_245DPS (0.00875F) 00015 #define LSM9DS1_GYRO_DPS_DIGIT_500DPS (0.01750F) 00016 #define LSM9DS1_GYRO_DPS_DIGIT_2000DPS (0.07000F) 00017 00018 #include "mbed.h" 00019 00020 class LSM9DS1 00021 { 00022 SPI spi8; 00023 DigitalOut cs_AG; 00024 DigitalOut cs_M; 00025 00026 public: 00027 00028 LSM9DS1(PinName _mosi, PinName _miso, PinName _sclk, PinName _cs_AG, PinName _cs_M); 00029 float gyro_x; 00030 float gyro_y; 00031 float gyro_z; 00032 float accel_x; 00033 float accel_y; 00034 float accel_z; 00035 float mag_x; 00036 float mag_y; 00037 float mag_z; 00038 00039 typedef enum 00040 { 00041 LSM9DS1_cs_AG = 0, 00042 LSM9DS1_cs_M = 1, 00043 00044 } lsm9ds1ChipSelect_t; 00045 00046 typedef enum 00047 { 00048 LSM9DS1_REGISTER_WHO_AM_I_XG = 0x0F, 00049 LSM9DS1_REGISTER_CTRL_REG1_G = 0x10, 00050 LSM9DS1_REGISTER_CTRL_REG2_G = 0x11, 00051 LSM9DS1_REGISTER_CTRL_REG3_G = 0x12, 00052 LSM9DS1_REGISTER_TEMP_OUT_L = 0x15, 00053 LSM9DS1_REGISTER_TEMP_OUT_H = 0x16, 00054 LSM9DS1_REGISTER_STATUS_REG = 0x17, 00055 LSM9DS1_REGISTER_OUT_X_L_G = 0x18, 00056 LSM9DS1_REGISTER_OUT_X_H_G = 0x19, 00057 LSM9DS1_REGISTER_OUT_Y_L_G = 0x1A, 00058 LSM9DS1_REGISTER_OUT_Y_H_G = 0x1B, 00059 LSM9DS1_REGISTER_OUT_Z_L_G = 0x1C, 00060 LSM9DS1_REGISTER_OUT_Z_H_G = 0x1D, 00061 LSM9DS1_REGISTER_CTRL_REG4 = 0x1E, 00062 LSM9DS1_REGISTER_CTRL_REG5_XL = 0x1F, 00063 LSM9DS1_REGISTER_CTRL_REG6_XL = 0x20, 00064 LSM9DS1_REGISTER_CTRL_REG7_XL = 0x21, 00065 LSM9DS1_REGISTER_CTRL_REG8 = 0x22, 00066 LSM9DS1_REGISTER_CTRL_REG9 = 0x23, 00067 LSM9DS1_REGISTER_CTRL_REG10 = 0x24, 00068 00069 LSM9DS1_REGISTER_OUT_X_L_XL = 0x28, 00070 LSM9DS1_REGISTER_OUT_X_H_XL = 0x29, 00071 LSM9DS1_REGISTER_OUT_Y_L_XL = 0x2A, 00072 LSM9DS1_REGISTER_OUT_Y_H_XL = 0x2B, 00073 LSM9DS1_REGISTER_OUT_Z_L_XL = 0x2C, 00074 LSM9DS1_REGISTER_OUT_Z_H_XL = 0x2D, 00075 00076 } lsm9ds1AccGyroRegisters_t; 00077 00078 typedef enum 00079 { 00080 LSM9DS1_REGISTER_WHO_AM_I_M = 0x0F, 00081 LSM9DS1_REGISTER_CTRL_REG1_M = 0x20, 00082 LSM9DS1_REGISTER_CTRL_REG2_M = 0x21, 00083 LSM9DS1_REGISTER_CTRL_REG3_M = 0x22, 00084 LSM9DS1_REGISTER_CTRL_REG4_M = 0x23, 00085 LSM9DS1_REGISTER_CTRL_REG5_M = 0x24, 00086 LSM9DS1_REGISTER_STATUS_REG_M = 0x27, 00087 LSM9DS1_REGISTER_OUT_X_L_M = 0x28, 00088 LSM9DS1_REGISTER_OUT_X_H_M = 0x29, 00089 LSM9DS1_REGISTER_OUT_Y_L_M = 0x2A, 00090 LSM9DS1_REGISTER_OUT_Y_H_M = 0x2B, 00091 LSM9DS1_REGISTER_OUT_Z_L_M = 0x2C, 00092 LSM9DS1_REGISTER_OUT_Z_H_M = 0x2D, 00093 LSM9DS1_REGISTER_CFG_M = 0x30, 00094 LSM9DS1_REGISTER_INT_SRC_M = 0x31, 00095 } lsm9ds1MagRegisters_t; 00096 00097 typedef enum 00098 { 00099 LSM9DS1_ACCELRANGE_2G = (0b00 << 3), 00100 LSM9DS1_ACCELRANGE_16G = (0b01 << 3), 00101 LSM9DS1_ACCELRANGE_4G = (0b10 << 3), 00102 LSM9DS1_ACCELRANGE_8G = (0b11 << 3), 00103 } lsm9ds1AccelRange_t; 00104 00105 typedef enum 00106 { 00107 LSM9DS1_ACCELDATARATE_POWERDOWN = (0b0000 << 4), 00108 LSM9DS1_ACCELDATARATE_3_125HZ = (0b0001 << 4), 00109 LSM9DS1_ACCELDATARATE_6_25HZ = (0b0010 << 4), 00110 LSM9DS1_ACCELDATARATE_12_5HZ = (0b0011 << 4), 00111 LSM9DS1_ACCELDATARATE_25HZ = (0b0100 << 4), 00112 LSM9DS1_ACCELDATARATE_50HZ = (0b0101 << 4), 00113 LSM9DS1_ACCELDATARATE_100HZ = (0b0110 << 4), 00114 LSM9DS1_ACCELDATARATE_200HZ = (0b0111 << 4), 00115 LSM9DS1_ACCELDATARATE_400HZ = (0b1000 << 4), 00116 LSM9DS1_ACCELDATARATE_800HZ = (0b1001 << 4), 00117 LSM9DS1_ACCELDATARATE_1600HZ = (0b1010 << 4) 00118 } lm9ds1AccelDataRate_t; 00119 00120 typedef enum 00121 { 00122 LSM9DS1_MAGGAIN_4GAUSS = (0b00 << 5), // +/- 4 gauss 00123 LSM9DS1_MAGGAIN_8GAUSS = (0b01 << 5), // +/- 8 gauss 00124 LSM9DS1_MAGGAIN_12GAUSS = (0b10 << 5), // +/- 12 gauss 00125 LSM9DS1_MAGGAIN_16GAUSS = (0b11 << 5) // +/- 16 gauss 00126 } lsm9ds1MagGain_t; 00127 00128 typedef enum 00129 { 00130 LSM9DS1_MAGDATARATE_3_125HZ = (0b000 << 2), 00131 LSM9DS1_MAGDATARATE_6_25HZ = (0b001 << 2), 00132 LSM9DS1_MAGDATARATE_12_5HZ = (0b010 << 2), 00133 LSM9DS1_MAGDATARATE_25HZ = (0b011 << 2), 00134 LSM9DS1_MAGDATARATE_50HZ = (0b100 << 2), 00135 LSM9DS1_MAGDATARATE_100HZ = (0b101 << 2) 00136 } lsm9ds1MagDataRate_t; 00137 00138 typedef enum 00139 { 00140 LSM9DS1_GYROSCALE_245DPS = (0b00 << 3), // +/- 245 degrees per second rotation 00141 LSM9DS1_GYROSCALE_500DPS = (0b01 << 3), // +/- 500 degrees per second rotation 00142 LSM9DS1_GYROSCALE_2000DPS = (0b11 << 3) // +/- 2000 degrees per second rotation 00143 } lsm9ds1GyroScale_t; 00144 00145 typedef struct vector_s 00146 { 00147 float x; 00148 float y; 00149 float z; 00150 } lsm9ds1Vector_t; 00151 00152 void initSPI(void); 00153 void initAccel(lsm9ds1AccelRange_t scale); 00154 void initGyro(lsm9ds1GyroScale_t scale); 00155 void initMag(lsm9ds1MagGain_t scale); 00156 void readAccel(); 00157 void readGyro(); 00158 void readMag(); 00159 uint8_t whoami(); 00160 uint8_t read8(lsm9ds1ChipSelect_t cs,uint8_t address); 00161 void write8(lsm9ds1ChipSelect_t cs,uint8_t address,uint8_t data); 00162 00163 private: 00164 float _accel_mg_lsb; 00165 float _mag_mgauss_lsb; 00166 float _gyro_dps_digit; 00167 };
Generated on Sun Jul 31 2022 18:20:00 by
1.7.2