Framework of classes and program to measure tilt angles using accelerometers

Dependencies:   C12832 mbed

Fork of tilt_angles by Mark Petovello

Revision:
0:3bffc1862262
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ENGO333_MMA7660.h	Thu Nov 24 23:02:42 2016 +0000
@@ -0,0 +1,153 @@
+/**
+ * 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
+