1
Diff: MMA8452.cpp
- Revision:
- 6:f6bde04bf8be
- Parent:
- 5:b3d0abd97e55
- Child:
- 8:89272163f395
diff -r b3d0abd97e55 -r f6bde04bf8be MMA8452.cpp --- 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