MMA8452Q I2C library Note: The I2C address is expected to be 7bit address unlike other I2C lib in mbed.

Dependents:   test_MMA8452Q HelloWorld testSensor

Committer:
Rhyme
Date:
Sun Dec 13 08:05:49 2015 +0000
Revision:
0:c315c3fd48fb
First commit as a library;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:c315c3fd48fb 1 /* Copyright (c) 2013-2015 Design Methodology Lab
Rhyme 0:c315c3fd48fb 2 */
Rhyme 0:c315c3fd48fb 3 /*
Rhyme 0:c315c3fd48fb 4 * Copyright (c) 2010-2011 mbed.org, MIT License
Rhyme 0:c315c3fd48fb 5 *
Rhyme 0:c315c3fd48fb 6 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Rhyme 0:c315c3fd48fb 7 * and associated documentation files (the "Software"), to deal in the Software without
Rhyme 0:c315c3fd48fb 8 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
Rhyme 0:c315c3fd48fb 9 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
Rhyme 0:c315c3fd48fb 10 * Software is furnished to do so, subject to the following conditions:
Rhyme 0:c315c3fd48fb 11 *
Rhyme 0:c315c3fd48fb 12 * The above copyright notice and this permission notice shall be included in all copies or
Rhyme 0:c315c3fd48fb 13 * substantial portions of the Software.
Rhyme 0:c315c3fd48fb 14 *
Rhyme 0:c315c3fd48fb 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
Rhyme 0:c315c3fd48fb 16 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Rhyme 0:c315c3fd48fb 17 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
Rhyme 0:c315c3fd48fb 18 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Rhyme 0:c315c3fd48fb 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Rhyme 0:c315c3fd48fb 20 */
Rhyme 0:c315c3fd48fb 21
Rhyme 0:c315c3fd48fb 22 #ifndef MMA8452Q_H
Rhyme 0:c315c3fd48fb 23 #define MMA8452Q_H
Rhyme 0:c315c3fd48fb 24
Rhyme 0:c315c3fd48fb 25 #include "mbed.h"
Rhyme 0:c315c3fd48fb 26
Rhyme 0:c315c3fd48fb 27 /**
Rhyme 0:c315c3fd48fb 28 * MMA8452Q accelerometer example
Rhyme 0:c315c3fd48fb 29 *
Rhyme 0:c315c3fd48fb 30 * @code
Rhyme 0:c315c3fd48fb 31 #include "mbed.h"
Rhyme 0:c315c3fd48fb 32 #include "MMA8452Q.h"
Rhyme 0:c315c3fd48fb 33
Rhyme 0:c315c3fd48fb 34 #if defined (TARGET_KL25Z)
Rhyme 0:c315c3fd48fb 35 #define PIN_SCL PTE1
Rhyme 0:c315c3fd48fb 36 #define PIN_SDA PTE0
Rhyme 0:c315c3fd48fb 37 #elif defined (TARGET_KL46Z)
Rhyme 0:c315c3fd48fb 38 #define PIN_SCL PTE1
Rhyme 0:c315c3fd48fb 39 #define PIN_SDA PTE0
Rhyme 0:c315c3fd48fb 40 #elif defined (TARGET_K64F)
Rhyme 0:c315c3fd48fb 41 #define PIN_SCL PTE24
Rhyme 0:c315c3fd48fb 42 #define PIN_SDA PTE25
Rhyme 0:c315c3fd48fb 43 #elif defined (TARGET_K22F)
Rhyme 0:c315c3fd48fb 44 #define PIN_SCL PTE1
Rhyme 0:c315c3fd48fb 45 #define PIN_SDA PTE0
Rhyme 0:c315c3fd48fb 46 #elif defined (TARGET_KL05Z)
Rhyme 0:c315c3fd48fb 47 #define PIN_SCL PTB3
Rhyme 0:c315c3fd48fb 48 #define PIN_SDA PTB4
Rhyme 0:c315c3fd48fb 49 #elif define (TARGET_F411RE)
Rhyme 0:c315c3fd48fb 50 #define PIN_SCL PB_8
Rhyme 0:c315c3fd48fb 51 #define PIN_SDA PB_9
Rhyme 0:c315c3fd48fb 52 #else
Rhyme 0:c315c3fd48fb 53 #error TARGET NOT DEFINED
Rhyme 0:c315c3fd48fb 54 #endif
Rhyme 0:c315c3fd48fb 55
Rhyme 0:c315c3fd48fb 56 #define MMA8452_I2C_ADDRESS (0x1d)
Rhyme 0:c315c3fd48fb 57
Rhyme 0:c315c3fd48fb 58 int main(void) {
Rhyme 0:c315c3fd48fb 59 float x, y, z ;
Rhyme 0:c315c3fd48fb 60
Rhyme 0:c315c3fd48fb 61 MMA8452Q acc(PIN_SDA, PIN_SCL, MMA8452_I2C_ADDRESS);
Rhyme 0:c315c3fd48fb 62
Rhyme 0:c315c3fd48fb 63 while (true) {
Rhyme 0:c315c3fd48fb 64 x = acc.getAccX() ;
Rhyme 0:c315c3fd48fb 65 y = acc.getAccY() ;
Rhyme 0:c315c3fd48fb 66 z = acc.getAccZ() ;
Rhyme 0:c315c3fd48fb 67 printf("X[%.2f] Y[%.2f] Z[%.2f]\n",x, y, z) ;
Rhyme 0:c315c3fd48fb 68 wait(0.1);
Rhyme 0:c315c3fd48fb 69 }
Rhyme 0:c315c3fd48fb 70 }
Rhyme 0:c315c3fd48fb 71 * @endcode
Rhyme 0:c315c3fd48fb 72 */
Rhyme 0:c315c3fd48fb 73 class MMA8452Q
Rhyme 0:c315c3fd48fb 74 {
Rhyme 0:c315c3fd48fb 75 public:
Rhyme 0:c315c3fd48fb 76 /**
Rhyme 0:c315c3fd48fb 77 * MMA8452Q constructor
Rhyme 0:c315c3fd48fb 78 *
Rhyme 0:c315c3fd48fb 79 * @param sda SDA pin
Rhyme 0:c315c3fd48fb 80 * @param sdl SCL pin
Rhyme 0:c315c3fd48fb 81 * @param addr addr of the I2C peripheral
Rhyme 0:c315c3fd48fb 82 */
Rhyme 0:c315c3fd48fb 83 MMA8452Q(PinName sda, PinName scl, int addr);
Rhyme 0:c315c3fd48fb 84
Rhyme 0:c315c3fd48fb 85 /**
Rhyme 0:c315c3fd48fb 86 * MMA8452Q destructor
Rhyme 0:c315c3fd48fb 87 */
Rhyme 0:c315c3fd48fb 88 ~MMA8452Q();
Rhyme 0:c315c3fd48fb 89
Rhyme 0:c315c3fd48fb 90 /**
Rhyme 0:c315c3fd48fb 91 * Get the value of the WHO_AM_I register
Rhyme 0:c315c3fd48fb 92 *
Rhyme 0:c315c3fd48fb 93 * @returns WHO_AM_I value
Rhyme 0:c315c3fd48fb 94 */
Rhyme 0:c315c3fd48fb 95 uint8_t getWhoAmI();
Rhyme 0:c315c3fd48fb 96
Rhyme 0:c315c3fd48fb 97 /**
Rhyme 0:c315c3fd48fb 98 * Get X axis acceleration
Rhyme 0:c315c3fd48fb 99 *
Rhyme 0:c315c3fd48fb 100 * @returns X axis acceleration
Rhyme 0:c315c3fd48fb 101 */
Rhyme 0:c315c3fd48fb 102 float getAccX();
Rhyme 0:c315c3fd48fb 103
Rhyme 0:c315c3fd48fb 104 /**
Rhyme 0:c315c3fd48fb 105 * Get Y axis acceleration
Rhyme 0:c315c3fd48fb 106 *
Rhyme 0:c315c3fd48fb 107 * @returns Y axis acceleration
Rhyme 0:c315c3fd48fb 108 */
Rhyme 0:c315c3fd48fb 109 float getAccY();
Rhyme 0:c315c3fd48fb 110
Rhyme 0:c315c3fd48fb 111 /**
Rhyme 0:c315c3fd48fb 112 * Get Z axis acceleration
Rhyme 0:c315c3fd48fb 113 *
Rhyme 0:c315c3fd48fb 114 * @returns Z axis acceleration
Rhyme 0:c315c3fd48fb 115 */
Rhyme 0:c315c3fd48fb 116 float getAccZ();
Rhyme 0:c315c3fd48fb 117
Rhyme 0:c315c3fd48fb 118 /**
Rhyme 0:c315c3fd48fb 119 * Get XYZ axis acceleration
Rhyme 0:c315c3fd48fb 120 *
Rhyme 0:c315c3fd48fb 121 * @param res array where acceleration data will be stored
Rhyme 0:c315c3fd48fb 122 */
Rhyme 0:c315c3fd48fb 123 void getAccAllAxis(float * res);
Rhyme 0:c315c3fd48fb 124
Rhyme 0:c315c3fd48fb 125 private:
Rhyme 0:c315c3fd48fb 126 I2C m_i2c;
Rhyme 0:c315c3fd48fb 127 int m_addr;
Rhyme 0:c315c3fd48fb 128 void readRegs(int addr, uint8_t * data, int len);
Rhyme 0:c315c3fd48fb 129 void writeRegs(uint8_t * data, int len);
Rhyme 0:c315c3fd48fb 130 int16_t getAccAxis(uint8_t addr);
Rhyme 0:c315c3fd48fb 131
Rhyme 0:c315c3fd48fb 132 };
Rhyme 0:c315c3fd48fb 133
Rhyme 0:c315c3fd48fb 134 #endif