Library for Freescale MMA8452 Accelerometer

Dependents:   acce_ChenZhengyang mbed_ProjectC_Accelerometer AccelerometerProject mbed_Accelerometer ... more

Committer:
eencae
Date:
Sun Mar 08 15:31:02 2015 +0000
Revision:
0:df3b9e41edf3
Library for Freescale MMA8452 accelerometer.

Who changed what in which revision?

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