Works with 8g
Fork of MMA8452 by
Diff: MMA8452.cpp
- Revision:
- 20:d55e9d7eb17e
- Parent:
- 19:4d6cd7140a71
- Child:
- 21:a92a632a0cc7
--- a/MMA8452.cpp Thu Mar 06 18:07:43 2014 +0000 +++ b/MMA8452.cpp Fri Mar 07 11:55:30 2014 +0000 @@ -244,34 +244,51 @@ return 0; } -int readXCount(int *x) { +int MMA8452::readXCount(int *x) { char buf[2]; if(readXRaw((char*)&buf)) { return 1; } if(_bitDepth==BIT_DEPTH_12) { *x = twelveBitToSigned(&buf[0]); - *y = twelveBitToSigned(&buf[2]); - *z = twelveBitToSigned(&buf[4]); } else { *x = eightBitToSigned(&buf[0]); - *y = eightBitToSigned(&buf[1]); - *z = eightBitToSigned(&buf[2]); + } + return 0; +} + +int MMA8452::readYCount(int *y) { + char buf[2]; + if(readYRaw((char*)&buf)) { + return 1; + } + if(_bitDepth==BIT_DEPTH_12) { + *y = twelveBitToSigned(&buf[0]); + } else { + *y = eightBitToSigned(&buf[0]); } - + return 0; +} + +int MMA8452::readZCount(int *z) { + char buf[2]; + if(readZRaw((char*)&buf)) { + return 1; + } + if(_bitDepth==BIT_DEPTH_12) { + *z = twelveBitToSigned(&buf[0]); + } else { + *z = eightBitToSigned(&buf[0]); + } + return 0; } double MMA8452::convertCountToGravity(int count, int countsPerG) { return (double)count/(double)countsPerG; } -int MMA8452::readXYZGravity(double *x, double *y, double *z) { - int xCount = 0, yCount = 0, zCount = 0; - if(readXYZCounts(&xCount,&yCount,&zCount)) { - return 1; - } - - // assume starting with DYNAMIC_RANGE_2G and BIT_DEPTH_12 +int MMA8452::getCountsPerG() { + // assume starting with DYNAMIC_RANGE_2G and BIT_DEPTH_12 int countsPerG = 1024; if(_bitDepth==BIT_DEPTH_8) { countsPerG = 64; @@ -284,6 +301,15 @@ countsPerG /= 4; break; } + return countsPerG; +} + +int MMA8452::readXYZGravity(double *x, double *y, double *z) { + int xCount = 0, yCount = 0, zCount = 0; + if(readXYZCounts(&xCount,&yCount,&zCount)) { + return 1; + } + int countsPerG = getCountsPerG(); *x = convertCountToGravity(xCount,countsPerG); *y = convertCountToGravity(yCount,countsPerG); @@ -291,6 +317,39 @@ return 0; } +int MMA8452::readXGravity(double *x) { + int xCount = 0; + if(readXCount(&xCount)) { + return 1; + } + int countsPerG = getCountsPerG(); + + *x = convertCountToGravity(xCount,countsPerG); + return 0; +} + +int MMA8452::readYGravity(double *y) { + int yCount = 0; + if(readYCount(&yCount)) { + return 1; + } + int countsPerG = getCountsPerG(); + + *y = convertCountToGravity(yCount,countsPerG); + return 0; +} + +int MMA8452::readZGravity(double *z) { + int zCount = 0; + if(readZCount(&zCount)) { + return 1; + } + int countsPerG = getCountsPerG(); + + *z = convertCountToGravity(zCount,countsPerG); + return 0; +} + // apply an AND mask to a register. read register value, apply mask, write it back int MMA8452::logicalANDRegister(char addr, char mask) { char value = 0;