Project of Accelerometer

Dependencies:   mbed

Committer:
XuTianli
Date:
Sat May 09 21:03:13 2015 +0000
Revision:
0:07b87332e97f
ELEC 2645

Who changed what in which revision?

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