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:ebf150f92734, committed 2017-03-06
- Comitter:
- CKMonroe
- Date:
- Mon Mar 06 21:17:38 2017 +0000
- Parent:
- 7:7812354ef684
- Commit message:
- changed per HW 8.1
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 ebf150f92734 MMA8451Q8.cpp --- a/MMA8451Q8.cpp Wed Feb 22 15:35:47 2017 +0000 +++ b/MMA8451Q8.cpp Mon Mar 06 21:17:38 2017 +0000 @@ -34,6 +34,10 @@ #define MAX_8G 0x02 #define GSCALING 1024.0 +#define NUM_DATA 2 +#define ADDRESS_INDEX 0 +#define DATA_INDEX 1 +#define ACTIVEMASK 0x01 MMA8451Q::MMA8451Q(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) { // activate the peripheral @@ -43,20 +47,67 @@ MMA8451Q::~MMA8451Q() { } +void MMA8451Q::setStandbyMode(){ + //create unsigned integer to hold bits + uint8_t registerData[1]; + //create unsigned int array with 2 spots + //that will hold the registry control bits and 8 zeroes + uint8_t data[NUM_DATA] = {REG_CTRL_REG_1, 0x00}; + + //read the registry control data into the registerData array + readRegs(REG_CTRL_REG_1, registerData, 1); + //bitwise AND operation done between the register data being read, + //and the flipped (~) ACTIVEMASK (00000001 becomes 11111110 before + //being compared). The data is then set into the data array + data[1] = registerData[0] & ~ACTIVEMASK; + //write the new value back into the registry. The only thing that + //has changed here is that the last bit has been switched to a 0 + //to put the device in standby mode with the bitmask. + writeRegs(data,NUM_DATA); +} + +void MMA8451Q::setActiveMode(){ + //create unsigned integer to hold bits + uint8_t registerData[1]; + //create unsigned int array with 2 spots + //that will hold the registry control bits and 8 zeroes + uint8_t data[NUM_DATA] = {REG_CTRL_REG_1, 0x00}; + + //read the registry control data into the registerData array + readRegs(REG_CTRL_REG_1, registerData, 1); + //bitwise OR operation done between the register data being read, + //and ACTIVEMASK (00000001). The data is then set into the data array + data[1] = registerData[0] | ACTIVEMASK; + //write the new value back into the registry. The only thing that + //has changed here is that the last bit has been switched to a 1 + //to put the device in active mode with the bitmask. + writeRegs(data,NUM_DATA); +} + 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 gSelect) { + uint8_t data[NUM_DATA] = {REG_CTRL_REG_1, 0x00}; + + //incoming gSelect integer used to select g level + gChosen = gSelect; + + setStandbyMode(); //put in standby to select g mode + + //writeRegs(data, 2); + + data[ADDRESS_INDEX] = XYZ_DATA_CFG; + data[DATA_INDEX] = gChosen; + + //writeRegs(data, 2);// change g limit + //data[0] = REG_CTRL_REG_1; + //data[1] = 0x01; + + writeRegs(data, 2); //write new g level to register + setActiveMode(); //make active again } float MMA8451Q::getAccX() {
diff -r 7812354ef684 -r ebf150f92734 MMA8451Q8.h --- a/MMA8451Q8.h Wed Feb 22 15:35:47 2017 +0000 +++ b/MMA8451Q8.h Mon Mar 06 21:17:38 2017 +0000 @@ -97,16 +97,21 @@ * @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; + int gChosen; + + //these two new functions could be made private + 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 gSelect); private: - int16_t getAccAxis(uint8_t addr); + };