MMA8452Q I2C library Note: The I2C address is expected to be 7bit address unlike other I2C lib in mbed.
Dependents: test_MMA8452Q HelloWorld testSensor
MMA8452Q.h@0:c315c3fd48fb, 2015-12-13 (annotated)
- 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?
User | Revision | Line number | New 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 |