thisone
Fork of MMA8451Q8 by
Revision 9:79ca3a3ce1e7, committed 2017-03-08
- 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); + };