Works with 8g
Fork of MMA8452 by
Revision 6:f6bde04bf8be, committed 2013-10-17
- Comitter:
- ashleymills
- Date:
- Thu Oct 17 09:41:35 2013 +0000
- Parent:
- 5:b3d0abd97e55
- Child:
- 8:89272163f395
- Commit message:
- Cleaning some things.
Changed in this revision
MMA8452.cpp | Show annotated file Show diff for this revision Revisions of this file |
MMA8452.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/MMA8452.cpp Wed Oct 16 18:55:16 2013 +0000 +++ b/MMA8452.cpp Thu Oct 17 09:41:35 2013 +0000 @@ -19,20 +19,19 @@ # include "MMA8452.h" - - - - - // Connect module at I2C address using I2C port pins sda and scl Accelerometer_MMA8452::Accelerometer_MMA8452(PinName sda, PinName scl,int frequency) : m_i2c(sda, scl) , m_frequency(frequency) { //m_i2c.frequency(m_frequency); + + // setup read and write addresses to avoid duplication + _readAddress = (MMA8452_ADDRESS<<1) | 0x01; + _writeAddress = (MMA8452_ADDRESS<<1) & 0xFE; } // Destroys instance -Accelerometer_MMA8452::~Accelerometer_MMA8452() +Accelerometer_MMA8452::~Accelerometer_MMA8452() { } @@ -40,32 +39,22 @@ // Setting the control register bit 1 to true to activate the MMA8452 int Accelerometer_MMA8452::activate() { - char mcu_address = (MMA8452_ADDRESS<<1); - char init[2]; - init[0] = CTRL_REG_1; // control register 1 - init[1] = ACTIVE; // set to active + // set control register 1 to active + char init[2] = {CTRL_REG_1,ACTIVE}; - if(m_i2c.write(mcu_address,init,2) == 0) - { - return 0; // return 0 to indicate success - } - else - { - return 1; // crumbs it failed!!! - } - + // perform write and return error code + return m_i2c.write(_writeAddress,init,2); } // Get 'Fast Read Mode' called F_READ. If bit 1 is set '1' then F_READ is active. Fast read will skip LSB when reading xyz // resisters from 0x01 to 0x06. When F_READ is '0' then all 6 registers will be read. -int Accelerometer_MMA8452::get_CTRL_Reg1(int& CTRL_Reg) -{ +int Accelerometer_MMA8452::get_CTRL_Reg1(int* CTRL_Reg) { char mcu_address = (MMA8452_ADDRESS<<1); m_i2c.start(); - if( m_i2c.write( mcu_address & 0xFE) == 0) // just good practice to force bit 1 to a '0' by ANDing with 0xFE + if( m_i2c.write(_writeAddress) == 0) { return 1; // we failed to write the mcu address on the bus to initiate dialogue } @@ -78,16 +67,9 @@ { return 1; // we failed to request a read from that mcu - this really is just writing the mcu vaule on the bus } - CTRL_Reg = m_i2c.read(0); + *CTRL_Reg = m_i2c.read(0); m_i2c.stop(); return 0; - - -} - - - - } // Setting the control register bit 1 to true to activate the MMA8452
--- a/MMA8452.h Wed Oct 16 18:55:16 2013 +0000 +++ b/MMA8452.h Thu Oct 17 09:41:35 2013 +0000 @@ -115,11 +115,6 @@ #define SR_STATUS 0x08 // Auto-Wake and Active Mode Portrait/Landscape Samples per Seconds Register (Read/Write) #define PDET_STATUS 0x09 // Tap/Pulse Detection Register (Read/Write) #define PD_STATUS 0xA // Tap/Pulse Debounce Count Register (Read/Write) - - - - - class Accelerometer_MMA8452 { @@ -139,9 +134,7 @@ * */ ~Accelerometer_MMA8452(); - - - + /** Get system mode of the MMA8452 (not required) * returns 0 for success in reading the system mode of the chip * returns 1 for failure in reading the system mode of the chip @@ -152,7 +145,6 @@ int get_SystemMode(int& deviceSystemMode); - /** Get status of the MMA8452 (not required) * returns 0 for success in reading the status of the chip * returns 1 for failure in reading the status of the chip @@ -163,7 +155,6 @@ * */ int get_Status(int& deviceStatus); - /** Activate the MMA8452 (required) @@ -176,7 +167,6 @@ int activate(); - /** Standby the MMA8452 (not required) * returns 0 for success in activating the chip * returns 1 for failure in activating the chip @@ -195,7 +185,7 @@ * This will return the state of the control register 1. This holds and sets values for auto wake, sleep mode * output data rate, fast read mode and active/standby. More info on 6.7 of pdf for MMA8452 Freescale doc. */ - int get_CTRL_Reg1(int& CTRL_Reg); + int get_CTRL_Reg1(int* CTRL_Reg); /** Initialization of device MMA8452 (required) @@ -259,6 +249,8 @@ private: I2C m_i2c; int m_frequency; + int _readAddress; + int _writeAddress; };