Simple tiltmeter using accelerometer

Dependencies:   mbed C12832

Committer:
chtjhai
Date:
Sat Nov 23 04:58:09 2019 +0000
Revision:
0:7d6134e052e0
Simple tiltmeter using accelerometer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chtjhai 0:7d6134e052e0 1 /**
chtjhai 0:7d6134e052e0 2 * File : ENGO333_MPU9150.h
chtjhai 0:7d6134e052e0 3 * Created by : Chandra Tjhai
chtjhai 0:7d6134e052e0 4 * Created on : September 19, 2016
chtjhai 0:7d6134e052e0 5 *
chtjhai 0:7d6134e052e0 6 * Description :
chtjhai 0:7d6134e052e0 7 * This library is created for ENGO 333 class. The inertial sensor needs to be
chtjhai 0:7d6134e052e0 8 * mounted on the mbed Application Board. The I2C connection is automatically
chtjhai 0:7d6134e052e0 9 * set to p28 (SDA) and p27 (SCL).
chtjhai 0:7d6134e052e0 10 */
chtjhai 0:7d6134e052e0 11
chtjhai 0:7d6134e052e0 12 #ifndef ENGO333_MPU9150_H
chtjhai 0:7d6134e052e0 13 #define ENGO333_MPU9150_H
chtjhai 0:7d6134e052e0 14
chtjhai 0:7d6134e052e0 15 #include "ENGO333_I2C.h"
chtjhai 0:7d6134e052e0 16 #include "Tiltmeter.h"
chtjhai 0:7d6134e052e0 17
chtjhai 0:7d6134e052e0 18 /**
chtjhai 0:7d6134e052e0 19 * Define Macros: Device I2C slave addresses (R/W)
chtjhai 0:7d6134e052e0 20 */
chtjhai 0:7d6134e052e0 21 #define MPU9150_ADDRESS (0x68 << 1)
chtjhai 0:7d6134e052e0 22
chtjhai 0:7d6134e052e0 23 /**
chtjhai 0:7d6134e052e0 24 * Define Macros: Configuration Registers
chtjhai 0:7d6134e052e0 25 */
chtjhai 0:7d6134e052e0 26 #define MPU9150_CONFIG_REG 0x1A
chtjhai 0:7d6134e052e0 27 #define MPU9150_ACCEL_CONFIG_REG 0x1C
chtjhai 0:7d6134e052e0 28 #define MPU9150_INT_STATUS_REG 0x3A
chtjhai 0:7d6134e052e0 29 #define MPU9150_INT_PIN_CFG_REG 0x37
chtjhai 0:7d6134e052e0 30 #define MPU9150_PWR_MGMT_1_REG 0x6B
chtjhai 0:7d6134e052e0 31 #define MPU9150_WHO_AM_I_REG 0x75
chtjhai 0:7d6134e052e0 32
chtjhai 0:7d6134e052e0 33 /**
chtjhai 0:7d6134e052e0 34 * Define Macros: Measurement Data Registers
chtjhai 0:7d6134e052e0 35 */
chtjhai 0:7d6134e052e0 36 #define MPU9150_ACCEL_XOUT_H_REG 0x3B
chtjhai 0:7d6134e052e0 37 #define MPU9150_ACCEL_YOUT_H_REG 0x3D
chtjhai 0:7d6134e052e0 38 #define MPU9150_ACCEL_ZOUT_H_REG 0x3F
chtjhai 0:7d6134e052e0 39
chtjhai 0:7d6134e052e0 40 /**
chtjhai 0:7d6134e052e0 41 * Define Macros: IMU Definitions
chtjhai 0:7d6134e052e0 42 */
chtjhai 0:7d6134e052e0 43 #define MPU9150_SLEEP_BIT 6
chtjhai 0:7d6134e052e0 44 #define MPU9150_ACCEL_RANGE_2G 0
chtjhai 0:7d6134e052e0 45 #define MPU9150_ACCEL_RANGE_4G 1
chtjhai 0:7d6134e052e0 46 #define MPU9150_ACCEL_RANGE_8G 2
chtjhai 0:7d6134e052e0 47 #define MPU9150_ACCEL_RANGE_16G 3
chtjhai 0:7d6134e052e0 48 #define MPU9150_I_AM 0x68
chtjhai 0:7d6134e052e0 49 #define MPU9150_I2C_FAST_MODE 400000
chtjhai 0:7d6134e052e0 50 #define MPU9150_I2C_STD_MODE 100000
chtjhai 0:7d6134e052e0 51
chtjhai 0:7d6134e052e0 52 /**
chtjhai 0:7d6134e052e0 53 * Class
chtjhai 0:7d6134e052e0 54 * A class to handle MPU-9150 9-DOF sensor
chtjhai 0:7d6134e052e0 55 */
chtjhai 0:7d6134e052e0 56 class ENGO333_MPU9150
chtjhai 0:7d6134e052e0 57 {
chtjhai 0:7d6134e052e0 58 private:
chtjhai 0:7d6134e052e0 59 ENGO333_I2C i2c;
chtjhai 0:7d6134e052e0 60 float measAccel[3]; // Measured acceleration values in units of m/s/s
chtjhai 0:7d6134e052e0 61
chtjhai 0:7d6134e052e0 62 public:
chtjhai 0:7d6134e052e0 63 /**
chtjhai 0:7d6134e052e0 64 * Default Constructor
chtjhai 0:7d6134e052e0 65 * Once called, triggering device initialization and set data variables to
chtjhai 0:7d6134e052e0 66 * zero. Accelerometer is set to +-2G by default.
chtjhai 0:7d6134e052e0 67 */
chtjhai 0:7d6134e052e0 68 ENGO333_MPU9150();
chtjhai 0:7d6134e052e0 69
chtjhai 0:7d6134e052e0 70 /**
chtjhai 0:7d6134e052e0 71 * Function :
chtjhai 0:7d6134e052e0 72 * Enable/disable device sleep mode
chtjhai 0:7d6134e052e0 73 *
chtjhai 0:7d6134e052e0 74 * Argument :
chtjhai 0:7d6134e052e0 75 * state = TRUE/FALSE
chtjhai 0:7d6134e052e0 76 *
chtjhai 0:7d6134e052e0 77 * Return :
chtjhai 0:7d6134e052e0 78 * NONE
chtjhai 0:7d6134e052e0 79 */
chtjhai 0:7d6134e052e0 80 void setSleepMode(bool state);
chtjhai 0:7d6134e052e0 81
chtjhai 0:7d6134e052e0 82 /**
chtjhai 0:7d6134e052e0 83 * Function :
chtjhai 0:7d6134e052e0 84 * Test device's accelerometer connection
chtjhai 0:7d6134e052e0 85 *
chtjhai 0:7d6134e052e0 86 * Argument :
chtjhai 0:7d6134e052e0 87 * NONE
chtjhai 0:7d6134e052e0 88 *
chtjhai 0:7d6134e052e0 89 * Return :
chtjhai 0:7d6134e052e0 90 * Return TRUE if connection is good, otherwise FALSSE
chtjhai 0:7d6134e052e0 91 */
chtjhai 0:7d6134e052e0 92 virtual bool TestConnection();
chtjhai 0:7d6134e052e0 93
chtjhai 0:7d6134e052e0 94 /**
chtjhai 0:7d6134e052e0 95 * Function :
chtjhai 0:7d6134e052e0 96 * Set accelerometer full scale range, see MPU9150_ACCEL_RANGE_XG
chtjhai 0:7d6134e052e0 97 *
chtjhai 0:7d6134e052e0 98 * Argument :
chtjhai 0:7d6134e052e0 99 * range = values of MPU9150_ACCEL_RANGE_XG
chtjhai 0:7d6134e052e0 100 *
chtjhai 0:7d6134e052e0 101 * Return :
chtjhai 0:7d6134e052e0 102 * NONE
chtjhai 0:7d6134e052e0 103 */
chtjhai 0:7d6134e052e0 104 void setAccelRange(char range);
chtjhai 0:7d6134e052e0 105
chtjhai 0:7d6134e052e0 106 /**
chtjhai 0:7d6134e052e0 107 * Function :
chtjhai 0:7d6134e052e0 108 * Read raw accelerometer data, 3 axes
chtjhai 0:7d6134e052e0 109 *
chtjhai 0:7d6134e052e0 110 * Argument :
chtjhai 0:7d6134e052e0 111 * NONE
chtjhai 0:7d6134e052e0 112 *
chtjhai 0:7d6134e052e0 113 * Return :
chtjhai 0:7d6134e052e0 114 * NONE
chtjhai 0:7d6134e052e0 115 */
chtjhai 0:7d6134e052e0 116 virtual void ReadAccelerometers();
chtjhai 0:7d6134e052e0 117
chtjhai 0:7d6134e052e0 118 /**
chtjhai 0:7d6134e052e0 119 * Function :
chtjhai 0:7d6134e052e0 120 * Get raw X-axis acceleration
chtjhai 0:7d6134e052e0 121 *
chtjhai 0:7d6134e052e0 122 * Argument :
chtjhai 0:7d6134e052e0 123 * NONE
chtjhai 0:7d6134e052e0 124 *
chtjhai 0:7d6134e052e0 125 * Return :
chtjhai 0:7d6134e052e0 126 * Raw X-axis acceleration
chtjhai 0:7d6134e052e0 127 */
chtjhai 0:7d6134e052e0 128 virtual float GetAccelX() const;
chtjhai 0:7d6134e052e0 129
chtjhai 0:7d6134e052e0 130 /**
chtjhai 0:7d6134e052e0 131 * Function :
chtjhai 0:7d6134e052e0 132 * Get raw Y-axis acceleration
chtjhai 0:7d6134e052e0 133 *
chtjhai 0:7d6134e052e0 134 * Argument :
chtjhai 0:7d6134e052e0 135 * NONE
chtjhai 0:7d6134e052e0 136 *
chtjhai 0:7d6134e052e0 137 * Return :
chtjhai 0:7d6134e052e0 138 * Raw Y-axis acceleration
chtjhai 0:7d6134e052e0 139 */
chtjhai 0:7d6134e052e0 140 virtual float GetAccelY() const;
chtjhai 0:7d6134e052e0 141
chtjhai 0:7d6134e052e0 142 /**
chtjhai 0:7d6134e052e0 143 * Function :
chtjhai 0:7d6134e052e0 144 * Get raw Z-axis acceleration
chtjhai 0:7d6134e052e0 145 *
chtjhai 0:7d6134e052e0 146 * Argument :
chtjhai 0:7d6134e052e0 147 * NONE
chtjhai 0:7d6134e052e0 148 *
chtjhai 0:7d6134e052e0 149 * Return :
chtjhai 0:7d6134e052e0 150 * Raw Z-axis acceleration
chtjhai 0:7d6134e052e0 151 */
chtjhai 0:7d6134e052e0 152 virtual float GetAccelZ() const;
chtjhai 0:7d6134e052e0 153
chtjhai 0:7d6134e052e0 154 };
chtjhai 0:7d6134e052e0 155
chtjhai 0:7d6134e052e0 156 #endif
chtjhai 0:7d6134e052e0 157
chtjhai 0:7d6134e052e0 158
chtjhai 0:7d6134e052e0 159