Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MMA8451Q8 by
Revision 8:5f33af1d2c27, committed 2017-03-08
- Comitter:
- Raiden817
- Date:
- Wed Mar 08 16:27:12 2017 +0000
- Parent:
- 7:7812354ef684
- Commit message:
- Modified to allow gSelect and standby mode and active mode are now functions
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 7812354ef684 -r 5f33af1d2c27 MMA8451Q8.cpp --- a/MMA8451Q8.cpp Wed Feb 22 15:35:47 2017 +0000 +++ b/MMA8451Q8.cpp Wed Mar 08 16:27:12 2017 +0000 @@ -33,7 +33,12 @@ #define MAX_4G 0x01 #define MAX_8G 0x02 +#define NUMDATA 2 #define GSCALING 1024.0 +#define ADDRESSINDEX 0 +#define DATAINDEX 1 +#define ACTIVEMASK 0x01 + MMA8451Q::MMA8451Q(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) { // activate the peripheral @@ -48,15 +53,31 @@ 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}; +void MMA8451Q::setGLimit(int g) { + uint8_t data[2] = {REG_CTRL_REG_1, 0x00}; + SetStandByMode(); + data[ADDRESSINDEX] = XYZ_DATA_CFG; + data[DATAINDEX] = g + writeRegs(data, 2);// change g limit + SetActiveMode(); +} + +void MMA8451Q::SetStandByMode() { + uint8_t registerData[1]; + uint8_t data[NUMDATA] = {REG_CTRL_REG_1, 0x00}; + + readRegs(REG_CTRL_REG_1, registerData, 1); + data[1] = registerData[0] & ~ACTIVEMASK; 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::SetActiveMode() { + uint8_t registerData[1]; + uint8_t data[2] = {REG_CTRL_REG_1, 0x00}; + + readRegs(REG_CTRL_REG_1, registerData, 1); + data[1] = registerData[0] | ACTIVEMASK; + writeRegs(data, NUMDATA); // put in standby } float MMA8451Q::getAccX() {
diff -r 7812354ef684 -r 5f33af1d2c27 MMA8451Q8.h --- a/MMA8451Q8.h Wed Feb 22 15:35:47 2017 +0000 +++ b/MMA8451Q8.h Wed Mar 08 16:27:12 2017 +0000 @@ -101,9 +101,11 @@ I2C m_i2c; int m_addr; + void SetStandByMode(); + void SetActiveMode(); void readRegs(int addr, uint8_t * data, int len); void writeRegs(uint8_t * data, int len); - void setGLimit(); + void setGLimit(int g); private: int16_t getAccAxis(uint8_t addr);