Cubli library

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?

UserRevisionLine numberNew 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