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 0:6149091f755d, committed 2012-10-11
- Comitter:
- emilmont
- Date:
- Thu Oct 11 10:54:16 2012 +0000
- Child:
- 1:d2630136d51e
- Commit message:
- Package samux acceleromiter library;
Changed in this revision
| MMA8451Q.cpp | Show annotated file Show diff for this revision Revisions of this file |
| MMA8451Q.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8451Q.cpp Thu Oct 11 10:54:16 2012 +0000
@@ -0,0 +1,63 @@
+#include "MMA8451Q.h"
+
+#define REG_WHO_AM_I 0x0D
+#define REG_CTRL_REG_1 0x2A
+#define REG_OUT_X_MSB 0x01
+#define REG_OUT_Y_MSB 0x03
+#define REG_OUT_Z_MSB 0x05
+
+#define UINT14_MAX 16383
+
+MMA8451Q::MMA8451Q(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) {
+ // activate the peripheral
+ uint8_t data[2] = {REG_CTRL_REG_1, 0x01};
+ write_regs(data, 2);
+}
+
+MMA8451Q::~MMA8451Q() { }
+
+uint8_t MMA8451Q::getWhoAmI() {
+ uint8_t who_am_i = 0;
+ read_regs(REG_WHO_AM_I, &who_am_i, 1);
+ return who_am_i;
+}
+
+int16_t MMA8451Q::getAccX() {
+ return getAccAxis(REG_OUT_X_MSB);
+}
+
+int16_t MMA8451Q::getAccY() {
+ return getAccAxis(REG_OUT_Y_MSB);
+}
+
+int16_t MMA8451Q::getAccZ() {
+ return getAccAxis(REG_OUT_Z_MSB);
+}
+
+void MMA8451Q::getAccAllAxis(int16_t * res) {
+ res[0] = getAccX();
+ res[1] = getAccY();
+ res[2] = getAccZ();
+}
+
+int16_t MMA8451Q::getAccAxis(uint8_t addr) {
+ int16_t acc;
+ uint8_t res[2];
+ read_regs(addr, res, 2);
+
+ acc = (res[0] << 6) | (res[1] >> 2);
+ if (acc > UINT14_MAX/2)
+ acc -= UINT14_MAX;
+
+ return acc;
+}
+
+void MMA8451Q::read_regs(int addr, uint8_t * data, int len) {
+ char t[1] = {addr};
+ m_i2c.write(m_addr, t, 1, true);
+ m_i2c.read(m_addr, (char *)data, len);
+}
+
+void MMA8451Q::write_regs(uint8_t * data, int len) {
+ m_i2c.write(m_addr, (char *)data, len);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8451Q.h Thu Oct 11 10:54:16 2012 +0000
@@ -0,0 +1,70 @@
+#ifndef MMA8451Q_H
+#define MMA8451Q_H
+
+#include "mbed.h"
+
+//!Library for the MMA8451Q motion sensor.
+class MMA8451Q
+{
+public:
+ //!Creates an instance of the class.
+ /*
+ * Connect module at I2C address addr using I2C port pins sda and scl.
+ * MMA8451Q
+ * \param sda SDA pin
+ * \param sdl SCL pin
+ * \param addr addr of the I2C peripheral
+ */
+ MMA8451Q(PinName sda, PinName scl, int addr);
+
+ /*
+ * Destroys instance.
+ */
+ ~MMA8451Q();
+
+ /*
+ * Get the value of the WHO_AM_I register
+ *
+ * \returns WHO_AM_I value
+ */
+ uint8_t getWhoAmI();
+
+ /*
+ * Get X axis acceleration
+ *
+ * \returns X axis acceleration
+ */
+ int16_t getAccX();
+
+ /*
+ * Get Y axis acceleration
+ *
+ * \returns Y axis acceleration
+ */
+ int16_t getAccY();
+
+ /*
+ * Get Z axis acceleration
+ *
+ * \returns Z axis acceleration
+ */
+ int16_t getAccZ();
+
+ /*
+ * Get XYZ axis acceleration
+ *
+ * \param res array where acceleration data will be stored
+ */
+ void getAccAllAxis(int16_t * res);
+
+ I2C m_i2c;
+
+private:
+ int m_addr;
+ void read_regs(int addr, uint8_t * data, int len);
+ void write_regs(uint8_t * data, int len);
+ int16_t getAccAxis(uint8_t addr);
+
+};
+
+#endif
