Generic communication interface between the wireless board (mote) and the sensor board. Any kind of sensor board can be connected to the mote using this specification given it provides a SPI peripheral, one input pin with interrupt capability and one digital output. The sensor board must implement a special register set from which all required information can be retrieved. Protocol: http://is.gd/wuQorh Github: http://is.gd/ySj1L9

Dependencies:   mbed-src

Committer:
marcelobarrosalmeida
Date:
Tue Apr 08 16:34:20 2014 +0000
Revision:
1:acdf490d94a7
Adding accel to sensor list

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcelobarrosalmeida 1:acdf490d94a7 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
marcelobarrosalmeida 1:acdf490d94a7 2 *
marcelobarrosalmeida 1:acdf490d94a7 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
marcelobarrosalmeida 1:acdf490d94a7 4 * and associated documentation files (the "Software"), to deal in the Software without
marcelobarrosalmeida 1:acdf490d94a7 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
marcelobarrosalmeida 1:acdf490d94a7 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
marcelobarrosalmeida 1:acdf490d94a7 7 * Software is furnished to do so, subject to the following conditions:
marcelobarrosalmeida 1:acdf490d94a7 8 *
marcelobarrosalmeida 1:acdf490d94a7 9 * The above copyright notice and this permission notice shall be included in all copies or
marcelobarrosalmeida 1:acdf490d94a7 10 * substantial portions of the Software.
marcelobarrosalmeida 1:acdf490d94a7 11 *
marcelobarrosalmeida 1:acdf490d94a7 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
marcelobarrosalmeida 1:acdf490d94a7 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
marcelobarrosalmeida 1:acdf490d94a7 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
marcelobarrosalmeida 1:acdf490d94a7 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
marcelobarrosalmeida 1:acdf490d94a7 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
marcelobarrosalmeida 1:acdf490d94a7 17 */
marcelobarrosalmeida 1:acdf490d94a7 18
marcelobarrosalmeida 1:acdf490d94a7 19 #ifndef MMA8451Q_H
marcelobarrosalmeida 1:acdf490d94a7 20 #define MMA8451Q_H
marcelobarrosalmeida 1:acdf490d94a7 21
marcelobarrosalmeida 1:acdf490d94a7 22 #include "mbed.h"
marcelobarrosalmeida 1:acdf490d94a7 23
marcelobarrosalmeida 1:acdf490d94a7 24 /**
marcelobarrosalmeida 1:acdf490d94a7 25 * MMA8451Q accelerometer example
marcelobarrosalmeida 1:acdf490d94a7 26 *
marcelobarrosalmeida 1:acdf490d94a7 27 * @code
marcelobarrosalmeida 1:acdf490d94a7 28 * #include "mbed.h"
marcelobarrosalmeida 1:acdf490d94a7 29 * #include "MMA8451Q.h"
marcelobarrosalmeida 1:acdf490d94a7 30 *
marcelobarrosalmeida 1:acdf490d94a7 31 * #define MMA8451_I2C_ADDRESS (0x1d<<1)
marcelobarrosalmeida 1:acdf490d94a7 32 *
marcelobarrosalmeida 1:acdf490d94a7 33 * int main(void) {
marcelobarrosalmeida 1:acdf490d94a7 34 *
marcelobarrosalmeida 1:acdf490d94a7 35 * MMA8451Q acc(P_E25, P_E24, MMA8451_I2C_ADDRESS);
marcelobarrosalmeida 1:acdf490d94a7 36 * PwmOut rled(LED_RED);
marcelobarrosalmeida 1:acdf490d94a7 37 * PwmOut gled(LED_GREEN);
marcelobarrosalmeida 1:acdf490d94a7 38 * PwmOut bled(LED_BLUE);
marcelobarrosalmeida 1:acdf490d94a7 39 *
marcelobarrosalmeida 1:acdf490d94a7 40 * while (true) {
marcelobarrosalmeida 1:acdf490d94a7 41 * rled = 1.0 - abs(acc.getAccX());
marcelobarrosalmeida 1:acdf490d94a7 42 * gled = 1.0 - abs(acc.getAccY());
marcelobarrosalmeida 1:acdf490d94a7 43 * bled = 1.0 - abs(acc.getAccZ());
marcelobarrosalmeida 1:acdf490d94a7 44 * wait(0.1);
marcelobarrosalmeida 1:acdf490d94a7 45 * }
marcelobarrosalmeida 1:acdf490d94a7 46 * }
marcelobarrosalmeida 1:acdf490d94a7 47 * @endcode
marcelobarrosalmeida 1:acdf490d94a7 48 */
marcelobarrosalmeida 1:acdf490d94a7 49 class MMA8451Q
marcelobarrosalmeida 1:acdf490d94a7 50 {
marcelobarrosalmeida 1:acdf490d94a7 51 public:
marcelobarrosalmeida 1:acdf490d94a7 52 /**
marcelobarrosalmeida 1:acdf490d94a7 53 * MMA8451Q constructor
marcelobarrosalmeida 1:acdf490d94a7 54 *
marcelobarrosalmeida 1:acdf490d94a7 55 * @param sda SDA pin
marcelobarrosalmeida 1:acdf490d94a7 56 * @param sdl SCL pin
marcelobarrosalmeida 1:acdf490d94a7 57 * @param addr addr of the I2C peripheral
marcelobarrosalmeida 1:acdf490d94a7 58 */
marcelobarrosalmeida 1:acdf490d94a7 59 MMA8451Q(PinName sda, PinName scl, int addr);
marcelobarrosalmeida 1:acdf490d94a7 60
marcelobarrosalmeida 1:acdf490d94a7 61 /**
marcelobarrosalmeida 1:acdf490d94a7 62 * MMA8451Q destructor
marcelobarrosalmeida 1:acdf490d94a7 63 */
marcelobarrosalmeida 1:acdf490d94a7 64 ~MMA8451Q();
marcelobarrosalmeida 1:acdf490d94a7 65
marcelobarrosalmeida 1:acdf490d94a7 66 /**
marcelobarrosalmeida 1:acdf490d94a7 67 * Get the value of the WHO_AM_I register
marcelobarrosalmeida 1:acdf490d94a7 68 *
marcelobarrosalmeida 1:acdf490d94a7 69 * @returns WHO_AM_I value
marcelobarrosalmeida 1:acdf490d94a7 70 */
marcelobarrosalmeida 1:acdf490d94a7 71 uint8_t getWhoAmI();
marcelobarrosalmeida 1:acdf490d94a7 72
marcelobarrosalmeida 1:acdf490d94a7 73 /**
marcelobarrosalmeida 1:acdf490d94a7 74 * Get X axis acceleration
marcelobarrosalmeida 1:acdf490d94a7 75 *
marcelobarrosalmeida 1:acdf490d94a7 76 * @returns X axis acceleration
marcelobarrosalmeida 1:acdf490d94a7 77 */
marcelobarrosalmeida 1:acdf490d94a7 78 float getAccX();
marcelobarrosalmeida 1:acdf490d94a7 79
marcelobarrosalmeida 1:acdf490d94a7 80 /**
marcelobarrosalmeida 1:acdf490d94a7 81 * Get Y axis acceleration
marcelobarrosalmeida 1:acdf490d94a7 82 *
marcelobarrosalmeida 1:acdf490d94a7 83 * @returns Y axis acceleration
marcelobarrosalmeida 1:acdf490d94a7 84 */
marcelobarrosalmeida 1:acdf490d94a7 85 float getAccY();
marcelobarrosalmeida 1:acdf490d94a7 86
marcelobarrosalmeida 1:acdf490d94a7 87 /**
marcelobarrosalmeida 1:acdf490d94a7 88 * Get Z axis acceleration
marcelobarrosalmeida 1:acdf490d94a7 89 *
marcelobarrosalmeida 1:acdf490d94a7 90 * @returns Z axis acceleration
marcelobarrosalmeida 1:acdf490d94a7 91 */
marcelobarrosalmeida 1:acdf490d94a7 92 float getAccZ();
marcelobarrosalmeida 1:acdf490d94a7 93
marcelobarrosalmeida 1:acdf490d94a7 94 /**
marcelobarrosalmeida 1:acdf490d94a7 95 * Get XYZ axis acceleration
marcelobarrosalmeida 1:acdf490d94a7 96 *
marcelobarrosalmeida 1:acdf490d94a7 97 * @param res array where acceleration data will be stored
marcelobarrosalmeida 1:acdf490d94a7 98 */
marcelobarrosalmeida 1:acdf490d94a7 99 void getAccAllAxis(float * res);
marcelobarrosalmeida 1:acdf490d94a7 100
marcelobarrosalmeida 1:acdf490d94a7 101 private:
marcelobarrosalmeida 1:acdf490d94a7 102 I2C m_i2c;
marcelobarrosalmeida 1:acdf490d94a7 103 int m_addr;
marcelobarrosalmeida 1:acdf490d94a7 104 void readRegs(int addr, uint8_t * data, int len);
marcelobarrosalmeida 1:acdf490d94a7 105 void writeRegs(uint8_t * data, int len);
marcelobarrosalmeida 1:acdf490d94a7 106 int16_t getAccAxis(uint8_t addr);
marcelobarrosalmeida 1:acdf490d94a7 107
marcelobarrosalmeida 1:acdf490d94a7 108 };
marcelobarrosalmeida 1:acdf490d94a7 109
marcelobarrosalmeida 1:acdf490d94a7 110 #endif