Class Module for MMA845x I2C Accelerometer.

Dependents:   mDotEVBM2X MTDOT-EVBDemo-DRH MTDOT-BOX-EVB-Factory-Firmware-LIB-108 MTDOT-UDKDemo_Senet ... more

Fork of MMA845x by Sam Grove

Revision:
5:d662a7003b6f
Parent:
4:4ff1650da84c
diff -r 4ff1650da84c -r d662a7003b6f MMA845x.cpp
--- a/MMA845x.cpp	Mon Oct 17 08:38:38 2016 -0500
+++ b/MMA845x.cpp	Wed Jan 31 10:02:14 2018 -0600
@@ -50,7 +50,6 @@
     uint8_t i = 0;
     char reg_val[1];
 
-    _i2c->frequency(100000);
     _who_am_i = 0x00;
 
     // Reset all registers to POR values
@@ -290,8 +289,8 @@
 
     result |= _i2c->write(_i2c_addr, buf, 2);
 
-    if(result != 0) {
-        debug("MMA845x:writeRegister failed r-%d\n\r",result);
+    if (result != 0) {
+        debug("MMA845x::writeRegister failed r-%d\n\r",result);
     }
 
     return result;
@@ -303,18 +302,23 @@
     char reg_out[1];
 
     reg_out[0] = reg;
+    _i2c->lock();
+
+    // MMA8451Q expects a repeated start from the master
     result |= _i2c->write(_i2c_addr,reg_out,1,true);
 
-    if(result != 0) {
+    if (result != 0) {
         debug("MMA845x::readRegister failed write r- %d\n\r", result);
-        return result;
+        goto exit;
     }
 
     result |= _i2c->read(_i2c_addr,data,count,false);
 
-    if(result != 0) {
+    if (result != 0) {
         debug("MMA845x::readRegister failed read r-%d\n\r",result);
     }
 
+exit:
+    _i2c->unlock();
     return result;
 }