configure sensors on FRDM KL46Z and send data through Serial port. Need host(PC) software to interact with. Sampling rate can vary by proper instruction

Dependencies:   EventFramework mbed

Committer:
xmnan
Date:
Sat Feb 15 07:52:46 2014 +0000
Revision:
0:2b49a387e831
original version.; Utilize EventFrameWork; sensors: MMA8451Q MAG3110 TSISensor lightSensor + analog input

Who changed what in which revision?

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