thisone

Dependents:   LCD_ACC_46_v4-8g

Fork of MMA8451Q8 by Stanley Cohen

Revision:
9:79ca3a3ce1e7
Parent:
8:e7197838ba82
--- a/MMA8451Q8.cpp	Mon Mar 06 10:19:57 2017 +0000
+++ b/MMA8451Q8.cpp	Wed Mar 08 06:23:19 2017 +0000
@@ -33,7 +33,10 @@
 #define MAX_4G            0x01
 #define MAX_8G            0x02
 
+#define NUM_DATA          2
 #define GSCALING          1024.0
+#define ADRESS_INDEX      0
+#define DATA_INDEX        1
 
 float gScaling[3] = {4095.0,2048.0,1024.0}; //scaling for acceleration?
 
@@ -50,28 +53,47 @@
     readRegs(REG_WHO_AM_I, &who_am_i, 1);
     return who_am_i;
 }
+
+void MMA8451Q::setStandbyMode() {
+#define ACTIVEMASK 0X01
+    uint8_t registerData[1];
+    uint8_t data[NUM_DATA] = {REG_CTRL_REG_1, 0x00};
+    
+    readRegs(REG_CTRL_REG_1, registerData, 1);
+    data[1] = registerData[0] & ~ACTIVEMASK; // ~ flips the ACTIVEMASK, so 000000001 becomes 11111110
+    writeRegs(data, NUM_DATA); //standby      
+}
+
+void MMA8451Q::setActiveMode() {
+#define ACTIVEMASK 0X01
+    uint8_t registerData[1];
+    uint8_t data[NUM_DATA] = {REG_CTRL_REG_1, 0x00};
+    
+    readRegs(REG_CTRL_REG_1, registerData, 1);
+    data[1] = registerData[0] | ~ACTIVEMASK;
+    writeRegs(data, NUM_DATA);    
+}
+    
 void MMA8451Q::setGLimit(int gSelect) {   
     uint8_t data[NUM_DATA] = {REG_CTRL_REG_1, 0x00};
     gChosen = gSelect;
-    writeRegs(data, NUM_DATA); // put in standby
+    setStandbyMode();
     data[ADRESS_INDEX ] = XYZ_DATA_CFG;
     data[DATA_INDEX] = gChosen;
     writeRegs(data, 2);// change g limit
-    data[ADRESS_INDEX ] = REG_CTRL_REG_1;
-    data[DATA_INDEX] = 0x01;
-    writeRegs(data, 2); // make active
+    setActiveMode(); //make active
 }
 
 float MMA8451Q::getAccX() {
-    return (float(getAccAxis(REG_OUT_X_MSB))/GSCALING[gChosen]);
+    return (float(getAccAxis(REG_OUT_X_MSB))/gScaling[gChosen]);
 }
 
 float MMA8451Q::getAccY() {
-    return (float(getAccAxis(REG_OUT_Y_MSB))/GSCALING[gChosen]);
+    return (float(getAccAxis(REG_OUT_Y_MSB))/gScaling[gChosen]);
 }
 
 float MMA8451Q::getAccZ() {
-    return (float(getAccAxis(REG_OUT_Z_MSB))/GSCALING[gChosen]);
+    return (float(getAccAxis(REG_OUT_Z_MSB))/gScaling[gChosen]);
 }
 
 void MMA8451Q::getAccAllAxis(float * res) {
@@ -101,20 +123,3 @@
 void MMA8451Q::writeRegs(uint8_t * data, int len) {
     m_i2c.write(m_addr, (char *)data, len);
 }
-
-    void getAccAllAxis(float * res);
-
-int16_t getAccAxis(uint8_t addr);
-
-    I2C m_i2c;
-    int m_addr;
-    int gChosen;
-    
-    void setGLimit(int gSelect);
-    void setStandbyMode();
-    void setActiveMode();
-    void readRegs(int addr, uint8_t * data, int len);
-    void writeRegs(uint8_t * data, int len);
-    
-private:
-