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 #ifndef LSM9DS1_h 00002 #define LSM9DS1_h 00003 00004 #include "mbed.h" 00005 00006 // Physical constants 00007 #define GRAVITY 9.80665f 00008 #define PI 3.14159f 00009 00010 // LSM9DS1 I2C bus address 00011 #define LSM9DS1_ADDRESS_ACC_GYR 0x6B << 1 // (0xD6) Shift 1 bit left because mbed utilizes 8-bit addresses and not 7-bit 00012 #define LSM9DS1_ADDRESS_MAG 0x1E << 1 // (0x3C) Shift 1 bit left because mbed utilizes 8-bit addresses and not 7-bit 00013 00014 // Device identity 00015 #define WHO_AM_I 0x0F 00016 #define WHO_AM_I_M 0x0F 00017 00018 // Gyroscope configuration registers addresses 00019 #define CTRL_REG1_G 0x10 00020 // Gyroscope output register addresses 00021 #define OUT_X_L_G 0x18 00022 #define OUT_X_H_G 0x19 00023 #define OUT_Y_L_G 0x1A 00024 #define OUT_Y_H_G 0x1B 00025 #define OUT_Z_L_G 0x1C 00026 #define OUT_Z_H_G 0x1D 00027 00028 // Accelerometer configuration registers addresses 00029 #define CTRL_REG6_XL 0x20 00030 // Accelerometer output register addresses 00031 #define OUT_X_L_XL 0x28 00032 #define OUT_X_H_XL 0x29 00033 #define OUT_Y_L_XL 0x2A 00034 #define OUT_Y_H_XL 0x2B 00035 #define OUT_Z_L_XL 0x2C 00036 #define OUT_Z_H_XL 0x2D 00037 00038 // Magnetometer configuration registers addresses 00039 #define CTRL_REG1_M 0x20 00040 #define CTRL_REG2_M 0x21 00041 // Magnetometer output register addresses 00042 #define OUT_X_L_M 0x28 00043 #define OUT_X_H_M 0x29 00044 #define OUT_Y_L_M 0x2A 00045 #define OUT_Y_H_M 0x2B 00046 #define OUT_Z_L_M 0x2C 00047 #define OUT_Z_H_M 0x2D 00048 00049 // Gyroscope full-scale ranges 00050 enum gyr_scale 00051 { 00052 GYR_SCALE_245DPS = 0b00, 00053 GYR_SCALE_500DPS = 0b01, 00054 GYR_SCALE_2000DPS = 0b11 00055 }; 00056 00057 // Accelerometer full-scale ranges 00058 enum acc_scale 00059 { 00060 ACC_SCALE_2G = 0b00, 00061 ACC_SCALE_4G = 0b10, 00062 ACC_SCALE_8G = 0b11, 00063 ACC_SCALE_16G = 0b01 00064 }; 00065 00066 // Magnetometer full-scale ranges 00067 enum mag_scale 00068 { 00069 MAG_SCALE_4G = 0b00, 00070 MAG_SCALE_8G = 0b01, 00071 MAG_SCALE_12G = 0b10, 00072 MAG_SCALE_16G = 0b11 00073 }; 00074 00075 /** LSM9DS1 (IMU sensor) class 00076 * 00077 * Example code (print accelerometer and gyroscope data on serial port every 0.2 seconds): 00078 * @code 00079 * #include "mbed.h" 00080 * #include "USBSerial.h" 00081 * #include "LSM9DS1.h" 00082 * 00083 * USBSerial pc; 00084 * LSM9DS1 imu(A4,A5); 00085 * 00086 * int main() 00087 * { 00088 * imu.init(); 00089 * while(1) 00090 * { 00091 * imu.read(); 00092 pc.printf("Acc [m/s^2]: %.1f | %.1f | %.1f \n", imu.ax, imu.ay, imu.az); 00093 pc.printf("Gyr [rad/s]: %.1f | %.1f | %.1f \n", imu.gx, imu.gy, imu.gz); 00094 pc.printf("Mag [uT]: %.1f | %.1f | %.1f \n\n", imu.mx, imu.my, imu.mz); 00095 * wait(0.2); 00096 * } 00097 * } 00098 * @endcode 00099 * 00100 */ 00101 class LSM9DS1 00102 { 00103 public: 00104 00105 /** Class constructor */ 00106 LSM9DS1(PinName sda, PinName scl); 00107 00108 /** Initialize sensor */ 00109 bool init(); 00110 /** Read sensor data */ 00111 void read(); 00112 00113 /** Gyroscope data in x-axis [rad/s]*/ 00114 float gx; 00115 /** Gyroscope data in y-axis [rad/s]*/ 00116 float gy; 00117 /** Gyroscope data in z-axis [rad/s]*/ 00118 float gz; 00119 /** Accelerometer data in x-axis [m/s^2]*/ 00120 float ax; 00121 /** Accelerometer data in y-axis [m/s^2]*/ 00122 float ay; 00123 /** Accelerometer data in z-axis [m/s^2]*/ 00124 float az; 00125 /** Magnetometer data in x-axis [??]*/ 00126 float mx; 00127 /** Magnetometer data in y-axis [??]*/ 00128 float my; 00129 /** Magnetometer data in z-axis [??]*/ 00130 float mz; 00131 00132 private: 00133 00134 /** I2C bus */ 00135 I2C i2c; 00136 00137 /** Setup I2C bus */ 00138 void setup_i2c(); 00139 /** Test I2C bus */ 00140 bool test_i2c(); 00141 00142 /** Setup gyroscope configurations (full-scale range) */ 00143 void setup_gyr(gyr_scale g_scale = GYR_SCALE_2000DPS); 00144 /** Setup accelerometer configurations (full-scale range) */ 00145 void setup_acc(acc_scale a_scale = ACC_SCALE_2G); 00146 /** Setup magnetometer configurations (full-scale range) */ 00147 void setup_mag(mag_scale m_scale = MAG_SCALE_4G); 00148 00149 /** Read gyroscope data */ 00150 void read_gyr(); 00151 /** Read accelerometer data */ 00152 void read_acc(); 00153 /** Read magnetometer data */ 00154 void read_mag(); 00155 00156 /** Gyroscope resolution [rad/s / bit] */ 00157 float g_res; 00158 /** Accelerometer resolution [m/s^2 / bit] */ 00159 float a_res; 00160 /** Magnetometers resolution [uT / bit] */ 00161 float m_res; 00162 00163 }; 00164 00165 #endif
Generated on Mon Jul 18 2022 10:36:03 by
1.7.2