Cubli library
LSM9DS1/LSM9DS1.h@0:431ee55036ca, 2019-02-13 (annotated)
- Committer:
- fbob
- Date:
- Wed Feb 13 13:07:37 2019 +0000
- Revision:
- 0:431ee55036ca
- Child:
- 1:085840a3d767
Cubli library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fbob | 0:431ee55036ca | 1 | #ifndef LSM9DS1_h |
fbob | 0:431ee55036ca | 2 | #define LSM9DS1_h |
fbob | 0:431ee55036ca | 3 | |
fbob | 0:431ee55036ca | 4 | #include "mbed.h" |
fbob | 0:431ee55036ca | 5 | |
fbob | 0:431ee55036ca | 6 | // Physical constants |
fbob | 0:431ee55036ca | 7 | #define GRAVITY 9.80665f |
fbob | 0:431ee55036ca | 8 | #define PI 3.14159f |
fbob | 0:431ee55036ca | 9 | |
fbob | 0:431ee55036ca | 10 | // LSM9DS1 I2C bus address |
fbob | 0:431ee55036ca | 11 | #define LSM9DS1_ADDRESS 0xD6 |
fbob | 0:431ee55036ca | 12 | |
fbob | 0:431ee55036ca | 13 | // Device identity |
fbob | 0:431ee55036ca | 14 | #define WHO_AM_I 0x0F |
fbob | 0:431ee55036ca | 15 | |
fbob | 0:431ee55036ca | 16 | // Accelerometer configuration registers addresses |
fbob | 0:431ee55036ca | 17 | #define CTRL_REG6_XL 0x20 |
fbob | 0:431ee55036ca | 18 | // Accelerometer output register addresses |
fbob | 0:431ee55036ca | 19 | #define OUT_X_XL_L 0x28 |
fbob | 0:431ee55036ca | 20 | #define OUT_X_XL_H 0x29 |
fbob | 0:431ee55036ca | 21 | #define OUT_Y_XL_L 0x2A |
fbob | 0:431ee55036ca | 22 | #define OUT_Y_XL_H 0x2B |
fbob | 0:431ee55036ca | 23 | #define OUT_Z_XL_L 0x2C |
fbob | 0:431ee55036ca | 24 | #define OUT_Z_XL_H 0x2D |
fbob | 0:431ee55036ca | 25 | |
fbob | 0:431ee55036ca | 26 | // Gyroscope configuration registers addresses |
fbob | 0:431ee55036ca | 27 | #define CTRL_REG1_G 0x10 |
fbob | 0:431ee55036ca | 28 | // Accelerometer output register addresses |
fbob | 0:431ee55036ca | 29 | #define OUT_X_G_L 0x18 |
fbob | 0:431ee55036ca | 30 | #define OUT_X_G_H 0x19 |
fbob | 0:431ee55036ca | 31 | #define OUT_Y_G_L 0x1A |
fbob | 0:431ee55036ca | 32 | #define OUT_Y_G_H 0x1B |
fbob | 0:431ee55036ca | 33 | #define OUT_Z_G_L 0x1C |
fbob | 0:431ee55036ca | 34 | #define OUT_Z_G_H 0x1D |
fbob | 0:431ee55036ca | 35 | |
fbob | 0:431ee55036ca | 36 | // Accelerometer full-scale ranges |
fbob | 0:431ee55036ca | 37 | enum accel_scale |
fbob | 0:431ee55036ca | 38 | { |
fbob | 0:431ee55036ca | 39 | ACCEL_SCALE_2G = 0b00, |
fbob | 0:431ee55036ca | 40 | ACCEL_SCALE_4G = 0b10, |
fbob | 0:431ee55036ca | 41 | ACCEL_SCALE_8G = 0b11, |
fbob | 0:431ee55036ca | 42 | ACCEL_SCALE_16G = 0b01 |
fbob | 0:431ee55036ca | 43 | }; |
fbob | 0:431ee55036ca | 44 | |
fbob | 0:431ee55036ca | 45 | // Gyroscope full-scale ranges |
fbob | 0:431ee55036ca | 46 | enum gyro_scale |
fbob | 0:431ee55036ca | 47 | { |
fbob | 0:431ee55036ca | 48 | GYRO_SCALE_245DPS = 0b00, |
fbob | 0:431ee55036ca | 49 | GYRO_SCALE_500DPS = 0b01, |
fbob | 0:431ee55036ca | 50 | GYRO_SCALE_2000DPS = 0b11 |
fbob | 0:431ee55036ca | 51 | }; |
fbob | 0:431ee55036ca | 52 | |
fbob | 0:431ee55036ca | 53 | /** LSM9DS1 (IMU sensor) class |
fbob | 0:431ee55036ca | 54 | * |
fbob | 0:431ee55036ca | 55 | * Example code (print accelerometer and gyroscope data on serial port every 0.2 seconds): |
fbob | 0:431ee55036ca | 56 | * @code |
fbob | 0:431ee55036ca | 57 | * #include "mbed.h" |
fbob | 0:431ee55036ca | 58 | * #include "USBSerial.h" |
fbob | 0:431ee55036ca | 59 | * #include "LSM9DS1.h" |
fbob | 0:431ee55036ca | 60 | * |
fbob | 0:431ee55036ca | 61 | * USBSerial pc; |
fbob | 0:431ee55036ca | 62 | * LSM9DS1 imu(A4,A5); |
fbob | 0:431ee55036ca | 63 | * |
fbob | 0:431ee55036ca | 64 | * int main() |
fbob | 0:431ee55036ca | 65 | * { |
fbob | 0:431ee55036ca | 66 | * imu.init(); |
fbob | 0:431ee55036ca | 67 | * while(1) |
fbob | 0:431ee55036ca | 68 | * { |
fbob | 0:431ee55036ca | 69 | * imu.read(); |
fbob | 0:431ee55036ca | 70 | * pc.printf("Accel [m/s^2]: %6.2f %6.2f %6.2f \n", imu.ax, imu.ay, imu.az); |
fbob | 0:431ee55036ca | 71 | * pc.printf("Gyro [rad/s]: %6.2f %6.2f %6.2f \n\n", imu.gx, imu.gy, imu.gz); |
fbob | 0:431ee55036ca | 72 | * wait(0.2); |
fbob | 0:431ee55036ca | 73 | * } |
fbob | 0:431ee55036ca | 74 | * } |
fbob | 0:431ee55036ca | 75 | * @endcode |
fbob | 0:431ee55036ca | 76 | * |
fbob | 0:431ee55036ca | 77 | */ |
fbob | 0:431ee55036ca | 78 | class LSM9DS1 |
fbob | 0:431ee55036ca | 79 | { |
fbob | 0:431ee55036ca | 80 | public: |
fbob | 0:431ee55036ca | 81 | /** Class constructor */ |
fbob | 0:431ee55036ca | 82 | LSM9DS1(PinName sda, PinName scl); |
fbob | 0:431ee55036ca | 83 | |
fbob | 0:431ee55036ca | 84 | /** Initialize sensor */ |
fbob | 0:431ee55036ca | 85 | bool init(); |
fbob | 0:431ee55036ca | 86 | /** Read sensor data */ |
fbob | 0:431ee55036ca | 87 | void read(); |
fbob | 0:431ee55036ca | 88 | |
fbob | 0:431ee55036ca | 89 | /** Accelerometer data in x, y and z axis [m/s^2] */ |
fbob | 0:431ee55036ca | 90 | float ax, ay, az; |
fbob | 0:431ee55036ca | 91 | /** Gyroscope data in x, y and z axis [rad/s] */ |
fbob | 0:431ee55036ca | 92 | float gx, gy, gz; |
fbob | 0:431ee55036ca | 93 | private: |
fbob | 0:431ee55036ca | 94 | /** I2C bus */ |
fbob | 0:431ee55036ca | 95 | I2C i2c; |
fbob | 0:431ee55036ca | 96 | |
fbob | 0:431ee55036ca | 97 | /** Setup I2C bus */ |
fbob | 0:431ee55036ca | 98 | void setup_i2c(); |
fbob | 0:431ee55036ca | 99 | /** Test I2C bus */ |
fbob | 0:431ee55036ca | 100 | bool test_i2c(); |
fbob | 0:431ee55036ca | 101 | |
fbob | 0:431ee55036ca | 102 | /** Setup accelerometer configurations (full-scale range) */ |
fbob | 0:431ee55036ca | 103 | void setup_accel(accel_scale a_scale = ACCEL_SCALE_2G); |
fbob | 0:431ee55036ca | 104 | /** Setup gyroscope configurations (full-scale range) */ |
fbob | 0:431ee55036ca | 105 | void setup_gyro(gyro_scale g_scale = GYRO_SCALE_245DPS); |
fbob | 0:431ee55036ca | 106 | /** Read accelerometer data */ |
fbob | 0:431ee55036ca | 107 | void read_accel(); |
fbob | 0:431ee55036ca | 108 | /** Read gyroscope data */ |
fbob | 0:431ee55036ca | 109 | void read_gyro(); |
fbob | 0:431ee55036ca | 110 | |
fbob | 0:431ee55036ca | 111 | /** Write data into register on LSM9DS1 I2C bus address */ |
fbob | 0:431ee55036ca | 112 | void write_reg(uint8_t reg, uint8_t data); |
fbob | 0:431ee55036ca | 113 | /** Read data from register on LSM9DS1 I2C bus address */ |
fbob | 0:431ee55036ca | 114 | char read_reg(uint8_t reg); |
fbob | 0:431ee55036ca | 115 | |
fbob | 0:431ee55036ca | 116 | /** Accelerometer resolution [m/s^2 / bit] */ |
fbob | 0:431ee55036ca | 117 | float a_res; |
fbob | 0:431ee55036ca | 118 | /** Gyroscope resolution [rad/s / bit] */ |
fbob | 0:431ee55036ca | 119 | float g_res; |
fbob | 0:431ee55036ca | 120 | |
fbob | 0:431ee55036ca | 121 | }; |
fbob | 0:431ee55036ca | 122 | |
fbob | 0:431ee55036ca | 123 | #endif |