Made the following changes from tumblr post.

Fork of MMA8451Q8 by Stanley Cohen

Revision:
8:9a17721c387d
Parent:
7:7812354ef684
--- a/MMA8451Q8.cpp	Wed Feb 22 15:35:47 2017 +0000
+++ b/MMA8451Q8.cpp	Wed Mar 08 03:21:38 2017 +0000
@@ -33,7 +33,12 @@
 #define MAX_4G            0x01
 #define MAX_8G            0x02
 
+#define NUM_DATA          2
 #define GSCALING          1024.0
+#define ADDRESS_INDEX      0
+#define DATA_INDEX        1
+
+float gScaling[3] = {4095.0, 2048.0, 1024.0}; // scaling for acceleration of gravity values
 
 MMA8451Q::MMA8451Q(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) {
     // activate the peripheral
@@ -43,21 +48,50 @@
 
 MMA8451Q::~MMA8451Q() { }
 
+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;
+    writeRegs(data, NUM_DATA); // put in stanby  
+}
+
+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); //put in standby    
+}
+
+void MMA8451Q::setGLimit(int gSelect) {
+    uint8_t data[NUM_DATA] = {REG_CTRL_REG_1, 0x00};
+    gChosen = gSelect;
+    setStandbyMode();
+    data[ADDRESS_INDEX ] = XYZ_DATA_CFG;
+    data[DATA_INDEX] = gChosen;
+    writeRegs(data, 2); // change g limit
+    setActiveMode(); // make active    
+}
 uint8_t MMA8451Q::getWhoAmI() {
     uint8_t who_am_i = 0;
     readRegs(REG_WHO_AM_I, &who_am_i, 1);
     return who_am_i;
 }
-void MMA8451Q::setGLimit() {   
-    uint8_t data[2] = {REG_CTRL_REG_1, 0x00};
-    writeRegs(data, 2); // put in standby
-    data[0] = XYZ_DATA_CFG;
-    data[1] = MAX_8G;
-    writeRegs(data, 2);// change g limit
-    data[0] = REG_CTRL_REG_1;
-    data[1] = 0x01;
-    writeRegs(data, 2); // make active
-}
+//void MMA8451Q::setGLimit(int) {   
+//    uint8_t data[2] = {REG_CTRL_REG_1, 0x00};
+//    writeRegs(data, 2); // put in standby
+//    data[0] = XYZ_DATA_CFG;
+//    data[1] = MAX_8G;
+//    writeRegs(data, 2);// change g limit
+//    data[0] = REG_CTRL_REG_1;
+//    data[1] = 0x01;
+//    writeRegs(data, 2); // make active
+//}
 
 float MMA8451Q::getAccX() {
     return (float(getAccAxis(REG_OUT_X_MSB))/GSCALING);