copy for backup

Fork of MMA8451Q by Antonio Quevedo

Committer:
pedro_C
Date:
Wed Oct 19 10:26:07 2016 +0000
Revision:
1:204a460446d7
Parent:
0:7c9ab58f6af3
my test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
quevedo 0:7c9ab58f6af3 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
quevedo 0:7c9ab58f6af3 2 *
quevedo 0:7c9ab58f6af3 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
quevedo 0:7c9ab58f6af3 4 * and associated documentation files (the "Software"), to deal in the Software without
quevedo 0:7c9ab58f6af3 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
quevedo 0:7c9ab58f6af3 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
quevedo 0:7c9ab58f6af3 7 * Software is furnished to do so, subject to the following conditions:
quevedo 0:7c9ab58f6af3 8 *
quevedo 0:7c9ab58f6af3 9 * The above copyright notice and this permission notice shall be included in all copies or
quevedo 0:7c9ab58f6af3 10 * substantial portions of the Software.
quevedo 0:7c9ab58f6af3 11 *
quevedo 0:7c9ab58f6af3 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
quevedo 0:7c9ab58f6af3 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
quevedo 0:7c9ab58f6af3 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
quevedo 0:7c9ab58f6af3 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
quevedo 0:7c9ab58f6af3 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
quevedo 0:7c9ab58f6af3 17 */
quevedo 0:7c9ab58f6af3 18
quevedo 0:7c9ab58f6af3 19 #ifndef MMA8451Q_H
quevedo 0:7c9ab58f6af3 20 #define MMA8451Q_H
quevedo 0:7c9ab58f6af3 21
quevedo 0:7c9ab58f6af3 22 #include "mbed.h"
quevedo 0:7c9ab58f6af3 23
quevedo 0:7c9ab58f6af3 24 /**
pedro_C 1:204a460446d7 25 * MMA8451Q accelerometer example
quevedo 0:7c9ab58f6af3 26 *
quevedo 0:7c9ab58f6af3 27 * @code
quevedo 0:7c9ab58f6af3 28 * #include "mbed.h"
quevedo 0:7c9ab58f6af3 29 * #include "MMA8451Q.h"
quevedo 0:7c9ab58f6af3 30 *
pedro_C 1:204a460446d7 31 * #define MMA8451_I2C_ADDRESS (0x1d<<1)
pedro_C 1:204a460446d7 32 *
quevedo 0:7c9ab58f6af3 33 * int main(void) {
quevedo 0:7c9ab58f6af3 34 *
pedro_C 1:204a460446d7 35 * MMA8451Q acc(P_E25, P_E24, MMA8451_I2C_ADDRESS);
quevedo 0:7c9ab58f6af3 36 * PwmOut rled(LED_RED);
quevedo 0:7c9ab58f6af3 37 * PwmOut gled(LED_GREEN);
quevedo 0:7c9ab58f6af3 38 * PwmOut bled(LED_BLUE);
pedro_C 1:204a460446d7 39 *
pedro_C 1:204a460446d7 40 * while (true) {
pedro_C 1:204a460446d7 41 * rled = 1.0 - abs(acc.getAccX());
pedro_C 1:204a460446d7 42 * gled = 1.0 - abs(acc.getAccY());
pedro_C 1:204a460446d7 43 * bled = 1.0 - abs(acc.getAccZ());
pedro_C 1:204a460446d7 44 * wait(0.1);
quevedo 0:7c9ab58f6af3 45 * }
quevedo 0:7c9ab58f6af3 46 * }
quevedo 0:7c9ab58f6af3 47 * @endcode
quevedo 0:7c9ab58f6af3 48 */
quevedo 0:7c9ab58f6af3 49 class MMA8451Q
quevedo 0:7c9ab58f6af3 50 {
quevedo 0:7c9ab58f6af3 51 public:
quevedo 0:7c9ab58f6af3 52 /**
quevedo 0:7c9ab58f6af3 53 * MMA8451Q constructor
quevedo 0:7c9ab58f6af3 54 *
quevedo 0:7c9ab58f6af3 55 * @param sda SDA pin
quevedo 0:7c9ab58f6af3 56 * @param sdl SCL pin
pedro_C 1:204a460446d7 57 * @param addr addr of the I2C peripheral
quevedo 0:7c9ab58f6af3 58 */
pedro_C 1:204a460446d7 59 MMA8451Q(PinName sda, PinName scl, int addr);
quevedo 0:7c9ab58f6af3 60
quevedo 0:7c9ab58f6af3 61 /**
quevedo 0:7c9ab58f6af3 62 * MMA8451Q destructor
quevedo 0:7c9ab58f6af3 63 */
quevedo 0:7c9ab58f6af3 64 ~MMA8451Q();
quevedo 0:7c9ab58f6af3 65
quevedo 0:7c9ab58f6af3 66 /**
pedro_C 1:204a460446d7 67 * Get the value of the WHO_AM_I register
pedro_C 1:204a460446d7 68 *
pedro_C 1:204a460446d7 69 * @returns WHO_AM_I value
pedro_C 1:204a460446d7 70 */
pedro_C 1:204a460446d7 71 uint8_t getWhoAmI();
pedro_C 1:204a460446d7 72
pedro_C 1:204a460446d7 73 /**
pedro_C 1:204a460446d7 74 * Get X axis acceleration
pedro_C 1:204a460446d7 75 *
pedro_C 1:204a460446d7 76 * @returns X axis acceleration
pedro_C 1:204a460446d7 77 */
pedro_C 1:204a460446d7 78 float getAccX();
pedro_C 1:204a460446d7 79
pedro_C 1:204a460446d7 80 /**
pedro_C 1:204a460446d7 81 * Get Y axis acceleration
pedro_C 1:204a460446d7 82 *
pedro_C 1:204a460446d7 83 * @returns Y axis acceleration
pedro_C 1:204a460446d7 84 */
pedro_C 1:204a460446d7 85 float getAccY();
pedro_C 1:204a460446d7 86
pedro_C 1:204a460446d7 87 /**
pedro_C 1:204a460446d7 88 * Get Z axis acceleration
pedro_C 1:204a460446d7 89 *
pedro_C 1:204a460446d7 90 * @returns Z axis acceleration
pedro_C 1:204a460446d7 91 */
pedro_C 1:204a460446d7 92 float getAccZ();
pedro_C 1:204a460446d7 93
pedro_C 1:204a460446d7 94 /**
pedro_C 1:204a460446d7 95 * Get XYZ axis acceleration
quevedo 0:7c9ab58f6af3 96 *
quevedo 0:7c9ab58f6af3 97 * @param res array where acceleration data will be stored
quevedo 0:7c9ab58f6af3 98 */
pedro_C 1:204a460446d7 99 void getAccAllAxis(float * res);
pedro_C 1:204a460446d7 100
pedro_C 1:204a460446d7 101 /** JK
pedro_C 1:204a460446d7 102 * Setup Double Tap detection
pedro_C 1:204a460446d7 103
pedro_C 1:204a460446d7 104
pedro_C 1:204a460446d7 105 Example:
pedro_C 1:204a460446d7 106
pedro_C 1:204a460446d7 107 #include "mbed.h"
pedro_C 1:204a460446d7 108 #include "MMA8451Q.h"
pedro_C 1:204a460446d7 109
pedro_C 1:204a460446d7 110 #define MMA8451_I2C_ADDRESS (0x1d<<1)
pedro_C 1:204a460446d7 111 #define ON 0
pedro_C 1:204a460446d7 112 #define OFF !ON
pedro_C 1:204a460446d7 113
pedro_C 1:204a460446d7 114 //Setup the interrupts for the MMA8451Q
pedro_C 1:204a460446d7 115 InterruptIn accInt1(PTA14);
pedro_C 1:204a460446d7 116 InterruptIn accInt2(PTA15);//not used in this prog but this is the other int from the accelorometer
pedro_C 1:204a460446d7 117
pedro_C 1:204a460446d7 118 uint8_t togstat=0;//Led status
pedro_C 1:204a460446d7 119 DigitalOut bled(LED_BLUE);
pedro_C 1:204a460446d7 120
pedro_C 1:204a460446d7 121
pedro_C 1:204a460446d7 122 void tapTrue(void){//ISR
pedro_C 1:204a460446d7 123 if(togstat == 0){
pedro_C 1:204a460446d7 124 togstat = 1;
pedro_C 1:204a460446d7 125 bled=ON;
pedro_C 1:204a460446d7 126 } else {
pedro_C 1:204a460446d7 127 togstat = 0;
pedro_C 1:204a460446d7 128 bled=OFF;
pedro_C 1:204a460446d7 129 }
pedro_C 1:204a460446d7 130
pedro_C 1:204a460446d7 131 }
pedro_C 1:204a460446d7 132
pedro_C 1:204a460446d7 133
pedro_C 1:204a460446d7 134 int main(void) {
pedro_C 1:204a460446d7 135
pedro_C 1:204a460446d7 136 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);//accelorometer instance
pedro_C 1:204a460446d7 137
pedro_C 1:204a460446d7 138 acc.setDoubleTap();//Setup the MMA8451Q to look for a double Tap
pedro_C 1:204a460446d7 139 accInt1.rise(&tapTrue);//call tapTrue when an interrupt is generated on PTA14
pedro_C 1:204a460446d7 140
pedro_C 1:204a460446d7 141 while (true) {
pedro_C 1:204a460446d7 142 //Interrupt driven so nothing in main loop
pedro_C 1:204a460446d7 143 }
pedro_C 1:204a460446d7 144 }
pedro_C 1:204a460446d7 145
pedro_C 1:204a460446d7 146
pedro_C 1:204a460446d7 147 */
pedro_C 1:204a460446d7 148 void setDoubleTap(void);
quevedo 0:7c9ab58f6af3 149
quevedo 0:7c9ab58f6af3 150 private:
quevedo 0:7c9ab58f6af3 151 I2C m_i2c;
pedro_C 1:204a460446d7 152 int m_addr;
quevedo 0:7c9ab58f6af3 153 void readRegs(int addr, uint8_t * data, int len);
quevedo 0:7c9ab58f6af3 154 void writeRegs(uint8_t * data, int len);
pedro_C 1:204a460446d7 155 int16_t getAccAxis(uint8_t addr);
quevedo 0:7c9ab58f6af3 156
quevedo 0:7c9ab58f6af3 157 };
quevedo 0:7c9ab58f6af3 158
pedro_C 1:204a460446d7 159 #endif