thisone

Dependents:   LCD_ACC_46_v4-8g

Fork of MMA8451Q8 by Stanley Cohen

Files at this revision

API Documentation at this revision

Comitter:
mturner5
Date:
Wed Mar 08 06:23:19 2017 +0000
Parent:
8:e7197838ba82
Commit message:
revision;

Changed in this revision

MMA8451Q8.cpp Show annotated file Show diff for this revision Revisions of this file
MMA8451Q8.h Show annotated file Show diff for this revision Revisions of this file
diff -r e7197838ba82 -r 79ca3a3ce1e7 MMA8451Q8.cpp
--- 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:
-
diff -r e7197838ba82 -r 79ca3a3ce1e7 MMA8451Q8.h
--- a/MMA8451Q8.h	Mon Mar 06 10:19:57 2017 +0000
+++ b/MMA8451Q8.h	Wed Mar 08 06:23:19 2017 +0000
@@ -97,16 +97,22 @@
    * @param res array where acceleration data will be stored
    */
   void getAccAllAxis(float * res);
+  
+  int16_t getAccAxis(uint8_t addr);
 
 
   I2C m_i2c;
   int m_addr;
-  void readRegs(int addr, uint8_t * data, int len);
-  void writeRegs(uint8_t * data, int len);
-  void setGLimit(); 
+  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: 
-  int16_t getAccAxis(uint8_t addr);
+
 
 };