Cubli library
LSM9DS1/LSM9DS1.h
- Committer:
- fbob
- Date:
- 2019-02-25
- Revision:
- 2:dc7840a67f77
- Parent:
- 1:085840a3d767
File content as of revision 2:dc7840a67f77:
#ifndef LSM9DS1_h #define LSM9DS1_h #include "mbed.h" // Physical constants #define GRAVITY 9.80665f #define PI 3.14159f // LSM9DS1 I2C bus address #define LSM9DS1_ADDRESS_ACC_GYR 0x6B << 1 // (0xD6) Shift 1 bit left because mbed utilizes 8-bit addresses and not 7-bit #define LSM9DS1_ADDRESS_MAG 0x1E << 1 // (0x3C) Shift 1 bit left because mbed utilizes 8-bit addresses and not 7-bit // Device identity #define WHO_AM_I 0x0F #define WHO_AM_I_M 0x0F // Gyroscope configuration registers addresses #define CTRL_REG1_G 0x10 // Gyroscope output register addresses #define OUT_X_L_G 0x18 #define OUT_X_H_G 0x19 #define OUT_Y_L_G 0x1A #define OUT_Y_H_G 0x1B #define OUT_Z_L_G 0x1C #define OUT_Z_H_G 0x1D // Accelerometer configuration registers addresses #define CTRL_REG6_XL 0x20 // Accelerometer output register addresses #define OUT_X_L_XL 0x28 #define OUT_X_H_XL 0x29 #define OUT_Y_L_XL 0x2A #define OUT_Y_H_XL 0x2B #define OUT_Z_L_XL 0x2C #define OUT_Z_H_XL 0x2D // Magnetometer configuration registers addresses #define CTRL_REG1_M 0x20 #define CTRL_REG2_M 0x21 // Magnetometer output register addresses #define OUT_X_L_M 0x28 #define OUT_X_H_M 0x29 #define OUT_Y_L_M 0x2A #define OUT_Y_H_M 0x2B #define OUT_Z_L_M 0x2C #define OUT_Z_H_M 0x2D // Gyroscope full-scale ranges enum gyr_scale { GYR_SCALE_245DPS = 0b00, GYR_SCALE_500DPS = 0b01, GYR_SCALE_2000DPS = 0b11 }; // Accelerometer full-scale ranges enum acc_scale { ACC_SCALE_2G = 0b00, ACC_SCALE_4G = 0b10, ACC_SCALE_8G = 0b11, ACC_SCALE_16G = 0b01 }; // Magnetometer full-scale ranges enum mag_scale { MAG_SCALE_4G = 0b00, MAG_SCALE_8G = 0b01, MAG_SCALE_12G = 0b10, MAG_SCALE_16G = 0b11 }; /** LSM9DS1 (IMU sensor) class * * Example code (print accelerometer and gyroscope data on serial port every 0.2 seconds): * @code * #include "mbed.h" * #include "USBSerial.h" * #include "LSM9DS1.h" * * USBSerial pc; * LSM9DS1 imu(A4,A5); * * int main() * { * imu.init(); * while(1) * { * imu.read(); pc.printf("Acc [m/s^2]: %.1f | %.1f | %.1f \n", imu.ax, imu.ay, imu.az); pc.printf("Gyr [rad/s]: %.1f | %.1f | %.1f \n", imu.gx, imu.gy, imu.gz); pc.printf("Mag [uT]: %.1f | %.1f | %.1f \n\n", imu.mx, imu.my, imu.mz); * wait(0.2); * } * } * @endcode * */ class LSM9DS1 { public: /** Class constructor */ LSM9DS1(PinName sda, PinName scl); /** Initialize sensor */ bool init(); /** Read sensor data */ void read(); /** Gyroscope data in x-axis [rad/s]*/ float gx; /** Gyroscope data in y-axis [rad/s]*/ float gy; /** Gyroscope data in z-axis [rad/s]*/ float gz; /** Accelerometer data in x-axis [m/s^2]*/ float ax; /** Accelerometer data in y-axis [m/s^2]*/ float ay; /** Accelerometer data in z-axis [m/s^2]*/ float az; /** Magnetometer data in x-axis [??]*/ float mx; /** Magnetometer data in y-axis [??]*/ float my; /** Magnetometer data in z-axis [??]*/ float mz; private: /** I2C bus */ I2C i2c; /** Setup I2C bus */ void setup_i2c(); /** Test I2C bus */ bool test_i2c(); /** Setup gyroscope configurations (full-scale range) */ void setup_gyr(gyr_scale g_scale = GYR_SCALE_2000DPS); /** Setup accelerometer configurations (full-scale range) */ void setup_acc(acc_scale a_scale = ACC_SCALE_2G); /** Setup magnetometer configurations (full-scale range) */ void setup_mag(mag_scale m_scale = MAG_SCALE_4G); /** Read gyroscope data */ void read_gyr(); /** Read accelerometer data */ void read_acc(); /** Read magnetometer data */ void read_mag(); /** Gyroscope resolution [rad/s / bit] */ float g_res; /** Accelerometer resolution [m/s^2 / bit] */ float a_res; /** Magnetometers resolution [uT / bit] */ float m_res; }; #endif