Library for NXP's MMA8653

Revision:
0:c101a5ec5ef2
Child:
1:e8b14e0a4584
diff -r 000000000000 -r c101a5ec5ef2 MMA8653.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8653.h	Thu Aug 30 04:52:39 2018 +0000
@@ -0,0 +1,107 @@
+#ifndef MMA8652_H
+#define MMA8652_H
+
+#include "mbed.h"
+
+
+// MMA8653 Slave Address
+#define SLAVE_ADDR_7_BIT 0x1D
+
+#define UINT14_MAX        16383
+
+// MMA8653 internal register addresses
+#define STATUS 0x00
+#define OUT_X_MSB 0x01
+#define OUT_X_LSB 0x02
+#define OUT_Y_MSB 0x03
+#define OUT_Y_LSB 0x04
+#define OUT_Z_MSB 0x05
+#define OUT_Z_LSB 0x06
+#define SYSMOD 0x0B
+#define INT_SOURCE 0x0C
+#define WHO_AM_I 0x0D
+#define XYZ_DATA_CFG 0x0E
+#define PL_STATUS 0x10
+#define PL_CFG 0x11
+#define PL_COUNT 0x12
+#define PL_BF_ZCOMP 0x13
+#define PL_THS_REG 0x14
+#define FF_MT_CFG 0x15
+#define FF_MT_SRC 0x16
+#define FF_MT_THS 0x17
+#define FF_MT_COUNT 0x18
+#define ASLP_COUNT 0x29
+#define CTRL_REG1 0x2A
+#define CTRL_REG2 0x2B
+#define CTRL_REG3 0x2C
+#define CTRL_REG4 0x2D
+#define CTRL_REG5 0x2E
+#define OFF_X 0x2F
+#define OFF_Y 0x30
+#define OFF_Z 0x31
+
+#define MMA8652_STATUS 0x00
+#define MMA8652_OUT_X_MSB 0x01
+#define MMA8652_WHOAMI 0x0D
+#define MMA8652_XYZ_DATA_CFG 0x0E
+#define MMA8652_CTRL_REG1 0x2A
+#define MMA8652_WHOAMI_VAL 0x4A
+
+/** Library for the NXP MMA8653
+ *
+ */
+class MMA8653
+{
+public:
+    // Output buffer data format using full scale in register 0x0E[1-0]
+    enum FS {
+        PM2G = 0,
+        PM4G,
+        PM8G
+    };
+    
+    // Fast-read mode in register 0x02A[1]
+    enum F_READ {
+        Normal = 0,
+        FastRead
+    };
+    
+    /**
+    * Create a MMA8653 object
+    *
+    * @param &i2c pointer of I2C object
+    * @param dr dynamic range setting
+    * @param fr fast read setting
+    */
+    MMA8653(I2C &i2c, FS fs = PM2G, F_READ fr = Normal);
+    
+    /**
+     * Read 3-axis acceleration in floating point values (unit: G)
+     *
+     * @param *val array where acceleration data will be stored
+     */
+    void ReadXYZ(float *val);
+
+    /**
+     * Read 3-axis acceleration in signed 16-bit values (fast read should be off)
+     *
+     * @param *val array where acceleration data will be stored
+     */
+    void ReadXYZ_s16(short *val);
+    
+    /**
+     * Read 3-axis acceleration in signed 8-bit values (fast read should be on)
+     *
+     * @param *val array where acceleration data will be stored
+     */
+    void ReadXYZ_s8(signed char *val);
+
+private:
+    void byteWrite(char reg, char *val, int len);
+    void byteRead(char reg, char *val, int len);
+    FS dynamicRange;
+    bool fastReadFlag;
+    I2C *_i2c;
+};
+
+#endif