Accelerometer and angle meter

Dependencies:   Beep mbed

Committer:
shangtianting
Date:
Sun May 10 00:23:23 2015 +0000
Revision:
0:a57e07e44ab0
Accelerometer and angle meter

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shangtianting 0:a57e07e44ab0 1 /**
shangtianting 0:a57e07e44ab0 2 @file MMA8452.h
shangtianting 0:a57e07e44ab0 3
shangtianting 0:a57e07e44ab0 4 @brief Header file containing member functions and variables
shangtianting 0:a57e07e44ab0 5
shangtianting 0:a57e07e44ab0 6 */
shangtianting 0:a57e07e44ab0 7
shangtianting 0:a57e07e44ab0 8 #ifndef MMA8452_H
shangtianting 0:a57e07e44ab0 9 #define MMA8452_H
shangtianting 0:a57e07e44ab0 10
shangtianting 0:a57e07e44ab0 11 // MMA8452 address is 0x1D by default (see EAGLE schematic of breakout - SA = 1)
shangtianting 0:a57e07e44ab0 12 #define MMA8452_W_ADDRESS 0x3A
shangtianting 0:a57e07e44ab0 13 #define MMA8452_R_ADDRESS 0x3B
shangtianting 0:a57e07e44ab0 14 // Register Descriptions - p18 datasheet
shangtianting 0:a57e07e44ab0 15 #define OUT_X_MSB 0x01
shangtianting 0:a57e07e44ab0 16 #define WHO_AM_I 0x0D
shangtianting 0:a57e07e44ab0 17 #define CTRL_REG1 0x2A
shangtianting 0:a57e07e44ab0 18 #define XYZ_DATA_CFG 0x0E
shangtianting 0:a57e07e44ab0 19
shangtianting 0:a57e07e44ab0 20 typedef struct Acceleration Acceleration;
shangtianting 0:a57e07e44ab0 21 struct Acceleration {
shangtianting 0:a57e07e44ab0 22 float x;
shangtianting 0:a57e07e44ab0 23 float y;
shangtianting 0:a57e07e44ab0 24 float z;
shangtianting 0:a57e07e44ab0 25 };
shangtianting 0:a57e07e44ab0 26
shangtianting 0:a57e07e44ab0 27 #include "mbed.h"
shangtianting 0:a57e07e44ab0 28
shangtianting 0:a57e07e44ab0 29 /**
shangtianting 0:a57e07e44ab0 30 @brief Library for interfacing with MMA8452 I2C Accelerometer
shangtianting 0:a57e07e44ab0 31
shangtianting 0:a57e07e44ab0 32 @see http://www.freescale.com/files/sensors/doc/data_sheet/MMA8452Q.pdf
shangtianting 0:a57e07e44ab0 33 @see https://www.sparkfun.com/products/12756
shangtianting 0:a57e07e44ab0 34
shangtianting 0:a57e07e44ab0 35 @brief Revision 1.0
shangtianting 0:a57e07e44ab0 36
shangtianting 0:a57e07e44ab0 37 @author Craig A. Evans
shangtianting 0:a57e07e44ab0 38 @date March 2015
shangtianting 0:a57e07e44ab0 39 *
shangtianting 0:a57e07e44ab0 40 * Example:
shangtianting 0:a57e07e44ab0 41 * @code
shangtianting 0:a57e07e44ab0 42
shangtianting 0:a57e07e44ab0 43 #include "mbed.h"
shangtianting 0:a57e07e44ab0 44 #include "MMA8452.h"
shangtianting 0:a57e07e44ab0 45
shangtianting 0:a57e07e44ab0 46 MMA8452 mma8452(p28,p27); // SDA, SCL
shangtianting 0:a57e07e44ab0 47 Serial serial(USBTX,USBRX);
shangtianting 0:a57e07e44ab0 48
shangtianting 0:a57e07e44ab0 49 int main() {
shangtianting 0:a57e07e44ab0 50
shangtianting 0:a57e07e44ab0 51 mma8452.init(); // 100 Hz update rate, ±4g scale
shangtianting 0:a57e07e44ab0 52
shangtianting 0:a57e07e44ab0 53 Acceleration acceleration; // Accleration structure declared in MMA8452 class
shangtianting 0:a57e07e44ab0 54
shangtianting 0:a57e07e44ab0 55 while(1) {
shangtianting 0:a57e07e44ab0 56
shangtianting 0:a57e07e44ab0 57 acceleration = mma8452.readValues(); // read current values and print over serial port
shangtianting 0:a57e07e44ab0 58 serial.printf("x = %.2f g y = %.2f g z = %.2f g\n",acceleration.x,acceleration.y,acceleration.z);
shangtianting 0:a57e07e44ab0 59 wait(0.1); // short delay until next reading
shangtianting 0:a57e07e44ab0 60
shangtianting 0:a57e07e44ab0 61 }
shangtianting 0:a57e07e44ab0 62
shangtianting 0:a57e07e44ab0 63 }
shangtianting 0:a57e07e44ab0 64
shangtianting 0:a57e07e44ab0 65
shangtianting 0:a57e07e44ab0 66 * @endcode
shangtianting 0:a57e07e44ab0 67 */
shangtianting 0:a57e07e44ab0 68 class MMA8452
shangtianting 0:a57e07e44ab0 69 {
shangtianting 0:a57e07e44ab0 70
shangtianting 0:a57e07e44ab0 71 public:
shangtianting 0:a57e07e44ab0 72 /** Create a MMA8452 object connected to the specified pins
shangtianting 0:a57e07e44ab0 73 *
shangtianting 0:a57e07e44ab0 74 * @param sdaPin - mbed SDA pin
shangtianting 0:a57e07e44ab0 75 * @param sclPin - mbed SCL pin
shangtianting 0:a57e07e44ab0 76 *
shangtianting 0:a57e07e44ab0 77 */
shangtianting 0:a57e07e44ab0 78 MMA8452(PinName sdaPin, PinName sclPin);
shangtianting 0:a57e07e44ab0 79
shangtianting 0:a57e07e44ab0 80 /** Initialise accelerometer
shangtianting 0:a57e07e44ab0 81 *
shangtianting 0:a57e07e44ab0 82 * Powers up the accelerometer, sets 100 Hz update rate and ±4g scale
shangtianting 0:a57e07e44ab0 83 */
shangtianting 0:a57e07e44ab0 84 void init();
shangtianting 0:a57e07e44ab0 85
shangtianting 0:a57e07e44ab0 86 /** Get values of acceleration
shangtianting 0:a57e07e44ab0 87 *
shangtianting 0:a57e07e44ab0 88 * Reads the x,y,z values in g's
shangtianting 0:a57e07e44ab0 89 * @returns an Acceleration structure with x,y,z members (float)
shangtianting 0:a57e07e44ab0 90 */
shangtianting 0:a57e07e44ab0 91 Acceleration readValues();
shangtianting 0:a57e07e44ab0 92
shangtianting 0:a57e07e44ab0 93
shangtianting 0:a57e07e44ab0 94 private:
shangtianting 0:a57e07e44ab0 95 void sendByteToRegister(char byte,char reg);
shangtianting 0:a57e07e44ab0 96 char readByteFromRegister(char reg);
shangtianting 0:a57e07e44ab0 97 void readBytesFromRegister(char reg,int numberOfBytes,char bytes[]);
shangtianting 0:a57e07e44ab0 98 void error();
shangtianting 0:a57e07e44ab0 99
shangtianting 0:a57e07e44ab0 100 public:
shangtianting 0:a57e07e44ab0 101
shangtianting 0:a57e07e44ab0 102 private: // private variables
shangtianting 0:a57e07e44ab0 103 I2C* i2c;
shangtianting 0:a57e07e44ab0 104 BusOut* leds;
shangtianting 0:a57e07e44ab0 105
shangtianting 0:a57e07e44ab0 106 };
shangtianting 0:a57e07e44ab0 107
shangtianting 0:a57e07e44ab0 108
shangtianting 0:a57e07e44ab0 109
shangtianting 0:a57e07e44ab0 110 #endif