Framework of classes and program to measure tilt angles using accelerometers
Fork of tilt_angles by
ENGO333_MMA7660.h@0:3bffc1862262, 2016-11-24 (annotated)
- Committer:
- mpetovello
- Date:
- Thu Nov 24 23:02:42 2016 +0000
- Revision:
- 0:3bffc1862262
Lab 10 draft, 2016
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mpetovello | 0:3bffc1862262 | 1 | /** |
mpetovello | 0:3bffc1862262 | 2 | * File : ENGO333_MMA7660.h |
mpetovello | 0:3bffc1862262 | 3 | * Created by : Chandra Tjhai |
mpetovello | 0:3bffc1862262 | 4 | * Created on : September 10, 2016 |
mpetovello | 0:3bffc1862262 | 5 | * |
mpetovello | 0:3bffc1862262 | 6 | * Description : |
mpetovello | 0:3bffc1862262 | 7 | * This library is created for ENGO 333 class. The accelerometer is mounted |
mpetovello | 0:3bffc1862262 | 8 | * on the mbed Application Board. The I2C connection is permanently set to p28 |
mpetovello | 0:3bffc1862262 | 9 | * (SDA) and p27 (SCL). |
mpetovello | 0:3bffc1862262 | 10 | */ |
mpetovello | 0:3bffc1862262 | 11 | |
mpetovello | 0:3bffc1862262 | 12 | #ifndef ENGO333_MMA7660_H |
mpetovello | 0:3bffc1862262 | 13 | #define ENGO333_MMA7660_H |
mpetovello | 0:3bffc1862262 | 14 | |
mpetovello | 0:3bffc1862262 | 15 | #include "ENGO333_I2C.h" |
mpetovello | 0:3bffc1862262 | 16 | #include "Tiltmeter.h" |
mpetovello | 0:3bffc1862262 | 17 | |
mpetovello | 0:3bffc1862262 | 18 | // Sensor I2C address |
mpetovello | 0:3bffc1862262 | 19 | #define MMA7660_ADDRESS 0x98 |
mpetovello | 0:3bffc1862262 | 20 | |
mpetovello | 0:3bffc1862262 | 21 | // Define sensor registers |
mpetovello | 0:3bffc1862262 | 22 | #define MMA7660_XOUT_REG 0x00 |
mpetovello | 0:3bffc1862262 | 23 | #define MMA7660_YOUT_REG 0x01 |
mpetovello | 0:3bffc1862262 | 24 | #define MMA7660_ZOUT_REG 0x02 |
mpetovello | 0:3bffc1862262 | 25 | #define MMA7660_TILT_REG 0x03 |
mpetovello | 0:3bffc1862262 | 26 | #define MMA7660_SRST_REG 0x04 |
mpetovello | 0:3bffc1862262 | 27 | #define MMA7660_SPCNT_REG 0x05 |
mpetovello | 0:3bffc1862262 | 28 | #define MMA7660_INTSU_REG 0x06 |
mpetovello | 0:3bffc1862262 | 29 | #define MMA7660_MODE_REG 0x07 |
mpetovello | 0:3bffc1862262 | 30 | #define MMA7660_SR_REG 0x08 |
mpetovello | 0:3bffc1862262 | 31 | #define MMA7660_PDET_REF 0x09 |
mpetovello | 0:3bffc1862262 | 32 | #define MMA7660_PD_REG 0x0A |
mpetovello | 0:3bffc1862262 | 33 | |
mpetovello | 0:3bffc1862262 | 34 | // Define acceleration scale |
mpetovello | 0:3bffc1862262 | 35 | #define MMA7660_SCALE (21.33) |
mpetovello | 0:3bffc1862262 | 36 | |
mpetovello | 0:3bffc1862262 | 37 | // Define AMSR values |
mpetovello | 0:3bffc1862262 | 38 | typedef enum |
mpetovello | 0:3bffc1862262 | 39 | { |
mpetovello | 0:3bffc1862262 | 40 | MMA7660_AMSR120 = 0, |
mpetovello | 0:3bffc1862262 | 41 | MMA7660_AMSR64 = 1, |
mpetovello | 0:3bffc1862262 | 42 | MMA7660_AMSR32 = 2, |
mpetovello | 0:3bffc1862262 | 43 | MMA7660_AMSR16 = 3, |
mpetovello | 0:3bffc1862262 | 44 | MMA7660_AMSR8 = 4, |
mpetovello | 0:3bffc1862262 | 45 | MMA7660_AMSR4 = 5, |
mpetovello | 0:3bffc1862262 | 46 | MMA7660_AMSR2 = 6, |
mpetovello | 0:3bffc1862262 | 47 | MMA7660_AMSR1 = 7 |
mpetovello | 0:3bffc1862262 | 48 | }MMA7660_AMSR_t; |
mpetovello | 0:3bffc1862262 | 49 | |
mpetovello | 0:3bffc1862262 | 50 | /** |
mpetovello | 0:3bffc1862262 | 51 | * Class |
mpetovello | 0:3bffc1862262 | 52 | * A class to handle MMA7660 3-DOF accelerometer |
mpetovello | 0:3bffc1862262 | 53 | */ |
mpetovello | 0:3bffc1862262 | 54 | class ENGO333_MMA7660 |
mpetovello | 0:3bffc1862262 | 55 | { |
mpetovello | 0:3bffc1862262 | 56 | private: |
mpetovello | 0:3bffc1862262 | 57 | ENGO333_I2C i2c; // I2C communication connection |
mpetovello | 0:3bffc1862262 | 58 | float measAccel[3]; // Measured acceleration values in units of m/s/s |
mpetovello | 0:3bffc1862262 | 59 | |
mpetovello | 0:3bffc1862262 | 60 | public: |
mpetovello | 0:3bffc1862262 | 61 | /** |
mpetovello | 0:3bffc1862262 | 62 | * Default Constructor |
mpetovello | 0:3bffc1862262 | 63 | * Once called, trigger active mode and set MMA7660_AMSR8 |
mpetovello | 0:3bffc1862262 | 64 | */ |
mpetovello | 0:3bffc1862262 | 65 | ENGO333_MMA7660(); |
mpetovello | 0:3bffc1862262 | 66 | |
mpetovello | 0:3bffc1862262 | 67 | /** |
mpetovello | 0:3bffc1862262 | 68 | * Function : |
mpetovello | 0:3bffc1862262 | 69 | * Test device's accelerometer connection. MMA7660 does not have identifier |
mpetovello | 0:3bffc1862262 | 70 | * registers. Thus, this function will simply take measurements and check |
mpetovello | 0:3bffc1862262 | 71 | * their validity. |
mpetovello | 0:3bffc1862262 | 72 | * |
mpetovello | 0:3bffc1862262 | 73 | * Argument : |
mpetovello | 0:3bffc1862262 | 74 | * NONE |
mpetovello | 0:3bffc1862262 | 75 | * |
mpetovello | 0:3bffc1862262 | 76 | * Return : |
mpetovello | 0:3bffc1862262 | 77 | * Return TRUE if connection is good, otherwise FALSSE |
mpetovello | 0:3bffc1862262 | 78 | */ |
mpetovello | 0:3bffc1862262 | 79 | virtual bool TestConnection(); |
mpetovello | 0:3bffc1862262 | 80 | |
mpetovello | 0:3bffc1862262 | 81 | |
mpetovello | 0:3bffc1862262 | 82 | private: |
mpetovello | 0:3bffc1862262 | 83 | |
mpetovello | 0:3bffc1862262 | 84 | // Read the accelerometer data and store the values for later use. You can access the values by |
mpetovello | 0:3bffc1862262 | 85 | // calling the GetAccelX(), GetAccelY() and/or GetAccelZ(); |
mpetovello | 0:3bffc1862262 | 86 | // |
mpetovello | 0:3bffc1862262 | 87 | // Arguments: |
mpetovello | 0:3bffc1862262 | 88 | // None |
mpetovello | 0:3bffc1862262 | 89 | // |
mpetovello | 0:3bffc1862262 | 90 | // Returns: |
mpetovello | 0:3bffc1862262 | 91 | // Nothing |
mpetovello | 0:3bffc1862262 | 92 | // |
mpetovello | 0:3bffc1862262 | 93 | // Remarks: |
mpetovello | 0:3bffc1862262 | 94 | // The data will be stored in the 'MeasuredAccel' member variable in units of m/s/s |
mpetovello | 0:3bffc1862262 | 95 | virtual void ReadAccelerometers(); |
mpetovello | 0:3bffc1862262 | 96 | |
mpetovello | 0:3bffc1862262 | 97 | |
mpetovello | 0:3bffc1862262 | 98 | // Get the most recently measured X-axis acceleration as stored during the last call to |
mpetovello | 0:3bffc1862262 | 99 | // ReadAccelerometer() |
mpetovello | 0:3bffc1862262 | 100 | // |
mpetovello | 0:3bffc1862262 | 101 | // Arguments: |
mpetovello | 0:3bffc1862262 | 102 | // None |
mpetovello | 0:3bffc1862262 | 103 | // |
mpetovello | 0:3bffc1862262 | 104 | // Returns: |
mpetovello | 0:3bffc1862262 | 105 | // The function returns the most recently measured X-axis acceleration in units of m/s/s |
mpetovello | 0:3bffc1862262 | 106 | virtual float GetAccelX() const; |
mpetovello | 0:3bffc1862262 | 107 | |
mpetovello | 0:3bffc1862262 | 108 | |
mpetovello | 0:3bffc1862262 | 109 | // Get the most recently measured Y-axis acceleration as stored during the last call to |
mpetovello | 0:3bffc1862262 | 110 | // ReadAccelerometer() |
mpetovello | 0:3bffc1862262 | 111 | // |
mpetovello | 0:3bffc1862262 | 112 | // Arguments: |
mpetovello | 0:3bffc1862262 | 113 | // None |
mpetovello | 0:3bffc1862262 | 114 | // |
mpetovello | 0:3bffc1862262 | 115 | // Returns: |
mpetovello | 0:3bffc1862262 | 116 | // The function returns the most recently measured Y-axis acceleration in units of m/s/s |
mpetovello | 0:3bffc1862262 | 117 | virtual float GetAccelY() const; |
mpetovello | 0:3bffc1862262 | 118 | |
mpetovello | 0:3bffc1862262 | 119 | |
mpetovello | 0:3bffc1862262 | 120 | // Get the most recently measured Z-axis acceleration as stored during the last call to |
mpetovello | 0:3bffc1862262 | 121 | // ReadAccelerometer() |
mpetovello | 0:3bffc1862262 | 122 | // |
mpetovello | 0:3bffc1862262 | 123 | // Arguments: |
mpetovello | 0:3bffc1862262 | 124 | // None |
mpetovello | 0:3bffc1862262 | 125 | // |
mpetovello | 0:3bffc1862262 | 126 | // Returns: |
mpetovello | 0:3bffc1862262 | 127 | // The function returns the most recently measured Z-axis acceleration in units of m/s/s |
mpetovello | 0:3bffc1862262 | 128 | virtual float GetAccelZ() const; |
mpetovello | 0:3bffc1862262 | 129 | |
mpetovello | 0:3bffc1862262 | 130 | |
mpetovello | 0:3bffc1862262 | 131 | // Set the device to 'active' mode |
mpetovello | 0:3bffc1862262 | 132 | // |
mpetovello | 0:3bffc1862262 | 133 | // Arguments: |
mpetovello | 0:3bffc1862262 | 134 | // None |
mpetovello | 0:3bffc1862262 | 135 | // |
mpetovello | 0:3bffc1862262 | 136 | // Returns: |
mpetovello | 0:3bffc1862262 | 137 | // Nothing |
mpetovello | 0:3bffc1862262 | 138 | void SetActiveMode(); |
mpetovello | 0:3bffc1862262 | 139 | |
mpetovello | 0:3bffc1862262 | 140 | |
mpetovello | 0:3bffc1862262 | 141 | // Set the device sampling rate through AM bits, see MMA7660_SR_REG |
mpetovello | 0:3bffc1862262 | 142 | // |
mpetovello | 0:3bffc1862262 | 143 | // Arguments: |
mpetovello | 0:3bffc1862262 | 144 | // samplingRate = setting of AM bits in MMA7660_SR_REG |
mpetovello | 0:3bffc1862262 | 145 | // |
mpetovello | 0:3bffc1862262 | 146 | // Returns: |
mpetovello | 0:3bffc1862262 | 147 | // Nothing |
mpetovello | 0:3bffc1862262 | 148 | void SetSamplingRateAM(MMA7660_AMSR_t samplingRate); |
mpetovello | 0:3bffc1862262 | 149 | |
mpetovello | 0:3bffc1862262 | 150 | }; |
mpetovello | 0:3bffc1862262 | 151 | |
mpetovello | 0:3bffc1862262 | 152 | #endif |
mpetovello | 0:3bffc1862262 | 153 |