enhancing Multitech's library for some accelerometer
Fork of MMA845x by
Diff: MMA845x.cpp
- Revision:
- 12:92294b5ca1c1
- Parent:
- 10:89dd748f9211
- Child:
- 13:77a8994b3bb2
--- a/MMA845x.cpp Mon Jul 02 22:52:24 2018 +0000 +++ b/MMA845x.cpp Mon Jul 02 23:55:31 2018 +0000 @@ -142,15 +142,36 @@ return result; } -uint8_t MMA845x::enableOrientationDetect(void) const +uint8_t MMA845x::enableOrientationDetect(uint8_t debounce_steps, INTERRUPT_PIN pin) const { uint8_t result = 0; - // if(_who_am_i != MMA8451) { // debug("%s %d: Feature not compatible with the connected device.\n", __FILE__, __LINE__); // result = 1; // } // ↑ not true. MMA8451 is the only one supporting variable trip-angle values + char datain[1]; + uint8_t dataout; + + MMA845x::writeRegister(PL_COUNT, debounce_steps); + MMA845x::writeRegister(PL_CFG, 0b11000000); // enable and set debounce counter to clear out of {clear, decrement} + + if (pin != INT_NONE) { + // enable interrupt + result |= MMA845x::readRegister(CTRL_REG4, 1, datain); + dataout = (datain[0] | INT_LNDPRT); + result |= MMA845x::writeRegister(CTRL_REG4, dataout); + + //set pin for the interrupt + result |= MMA845x::readRegister(CTRL_REG5, 1, datain); + if (pin == 0) dataout = (datain[0] & ~INT_LNDPRT); // clearing bit + else dataout = (datain[0] | INT_LNDPRT); // setting bit + } else { + // disable interrupt + result |= MMA845x::readRegister(CTRL_REG4, 1, datain); + dataout = (datain[0] & ~INT_LNDPRT); + result |= MMA845x::writeRegister(CTRL_REG4, dataout); + } return result; }