Framework of classes and program to measure tilt angles using accelerometers

Dependencies:   C12832 mbed

Fork of tilt_angles by Mark Petovello

ENGO333_MMA7660.h

Committer:
mpetovello
Date:
2016-11-24
Revision:
0:3bffc1862262

File content as of revision 0:3bffc1862262:

/**
 * File : ENGO333_MMA7660.h
 * Created by : Chandra Tjhai
 * Created on : September 10, 2016
 *
 * Description :
 * This library is created for ENGO 333 class. The accelerometer is mounted
 * on the mbed Application Board. The I2C connection is permanently set to p28
 * (SDA) and p27 (SCL).
 */

#ifndef ENGO333_MMA7660_H
#define ENGO333_MMA7660_H

#include "ENGO333_I2C.h"
#include "Tiltmeter.h"

// Sensor I2C address
#define MMA7660_ADDRESS 0x98

// Define sensor registers
#define MMA7660_XOUT_REG 0x00
#define MMA7660_YOUT_REG 0x01
#define MMA7660_ZOUT_REG 0x02
#define MMA7660_TILT_REG 0x03
#define MMA7660_SRST_REG 0x04
#define MMA7660_SPCNT_REG 0x05
#define MMA7660_INTSU_REG 0x06
#define MMA7660_MODE_REG 0x07
#define MMA7660_SR_REG 0x08
#define MMA7660_PDET_REF 0x09
#define MMA7660_PD_REG 0x0A

// Define acceleration scale
#define MMA7660_SCALE (21.33)

// Define AMSR values
typedef enum
{
    MMA7660_AMSR120 = 0,
    MMA7660_AMSR64 = 1,
    MMA7660_AMSR32 = 2,
    MMA7660_AMSR16 = 3,
    MMA7660_AMSR8 = 4,
    MMA7660_AMSR4 = 5,
    MMA7660_AMSR2 = 6,
    MMA7660_AMSR1 = 7
}MMA7660_AMSR_t;

/**
 * Class
 *  A class to handle MMA7660 3-DOF accelerometer
 */
class ENGO333_MMA7660
{
private:
    ENGO333_I2C i2c;    // I2C communication connection
    float measAccel[3];  // Measured acceleration values in units of m/s/s

public:
    /**
     * Default Constructor
     *  Once called, trigger active mode and set MMA7660_AMSR8
     */
    ENGO333_MMA7660();
    
    /**
     * Function :
     *  Test device's accelerometer connection. MMA7660 does not have identifier
     *  registers. Thus, this function will simply take measurements and check 
     *  their validity.
     *
     * Argument :
     *  NONE
     *
     * Return :
     *  Return TRUE if connection is good, otherwise FALSSE
     */
    virtual bool TestConnection();


private:

   // Read the accelerometer data and store the values for later use. You can access the values by
   // calling the GetAccelX(), GetAccelY() and/or GetAccelZ();
   //
   // Arguments:
   //    None
   //
   // Returns:
   //    Nothing
   //
   // Remarks:
   //    The data will be stored in the 'MeasuredAccel' member variable in units of m/s/s
   virtual void ReadAccelerometers();


   // Get the most recently measured X-axis acceleration as stored during the last call to
   // ReadAccelerometer()
   //
   // Arguments:
   //    None
   //
   // Returns:
   //    The function returns the most recently measured X-axis acceleration in units of m/s/s
   virtual float GetAccelX() const;


   // Get the most recently measured Y-axis acceleration as stored during the last call to
   // ReadAccelerometer()
   //
   // Arguments:
   //    None
   //
   // Returns:
   //    The function returns the most recently measured Y-axis acceleration in units of m/s/s
   virtual float GetAccelY() const;


   // Get the most recently measured Z-axis acceleration as stored during the last call to
   // ReadAccelerometer()
   //
   // Arguments:
   //    None
   //
   // Returns:
   //    The function returns the most recently measured Z-axis acceleration in units of m/s/s
   virtual float GetAccelZ() const;
   
   
   // Set the device to 'active' mode
   //
   // Arguments: 
   //    None
   //
   // Returns:
   //    Nothing
   void SetActiveMode();
   
   
   // Set the device sampling rate through AM bits, see MMA7660_SR_REG
   //
   // Arguments:
   //    samplingRate = setting of AM bits in MMA7660_SR_REG
   //
   // Returns:
   //    Nothing
   void SetSamplingRateAM(MMA7660_AMSR_t samplingRate);
    
};

#endif