Code based on the original version from http://developer.mbed.org/users/eencae

Fork of MMA8452 by Craig Evans

Committer:
ml13emds
Date:
Mon May 11 03:36:44 2015 +0000
Revision:
1:584301c98fb8
Parent:
0:df3b9e41edf3
It was added functionalities for Transient and Pulse Detection.; Also it was added average reading and function for reading output from the High Pass Filter.

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
ml13emds 1:584301c98fb8 5 @see https://developer.mbed.org/users/eencae/code/MMA8452/
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
ml13emds 1:584301c98fb8 16 #define INT_SOURCE 0x0C
eencae 0:df3b9e41edf3 17 #define WHO_AM_I 0x0D
ml13emds 1:584301c98fb8 18 #define XYZ_DATA_CFG 0x0E
ml13emds 1:584301c98fb8 19 #define HP_FILTER_CUTOFF 0x0F
ml13emds 1:584301c98fb8 20 #define TRANSIENT_CFG 0x1D
ml13emds 1:584301c98fb8 21 #define TRANSIENT_SRC 0x1E
ml13emds 1:584301c98fb8 22 #define TRANSIENT_THS 0x1F
ml13emds 1:584301c98fb8 23 #define TRANSIENT_COUNT 0x20
ml13emds 1:584301c98fb8 24 #define PULSE_CFG 0x21
ml13emds 1:584301c98fb8 25 #define PULSE_SRC 0x22
ml13emds 1:584301c98fb8 26 #define PULSE_THSY 0x24
ml13emds 1:584301c98fb8 27 #define PULSE_TMLT 0x26
ml13emds 1:584301c98fb8 28 #define PULSE_LTCY 0x27
eencae 0:df3b9e41edf3 29 #define CTRL_REG1 0x2A
ml13emds 1:584301c98fb8 30 #define CTRL_REG3 0x2C
ml13emds 1:584301c98fb8 31 #define CTRL_REG4 0x2D
ml13emds 1:584301c98fb8 32 #define CTRL_REG5 0x2E
ml13emds 1:584301c98fb8 33
eencae 0:df3b9e41edf3 34
eencae 0:df3b9e41edf3 35 typedef struct Acceleration Acceleration;
eencae 0:df3b9e41edf3 36 struct Acceleration {
eencae 0:df3b9e41edf3 37 float x;
eencae 0:df3b9e41edf3 38 float y;
eencae 0:df3b9e41edf3 39 float z;
eencae 0:df3b9e41edf3 40 };
eencae 0:df3b9e41edf3 41
eencae 0:df3b9e41edf3 42 #include "mbed.h"
eencae 0:df3b9e41edf3 43
eencae 0:df3b9e41edf3 44 /**
eencae 0:df3b9e41edf3 45 @brief Library for interfacing with MMA8452 I2C Accelerometer
eencae 0:df3b9e41edf3 46
eencae 0:df3b9e41edf3 47 @see http://www.freescale.com/files/sensors/doc/data_sheet/MMA8452Q.pdf
eencae 0:df3b9e41edf3 48 @see https://www.sparkfun.com/products/12756
eencae 0:df3b9e41edf3 49
eencae 0:df3b9e41edf3 50 @brief Revision 1.0
eencae 0:df3b9e41edf3 51
eencae 0:df3b9e41edf3 52 @author Craig A. Evans
eencae 0:df3b9e41edf3 53 @date March 2015
eencae 0:df3b9e41edf3 54 *
eencae 0:df3b9e41edf3 55 * Example:
eencae 0:df3b9e41edf3 56 * @code
eencae 0:df3b9e41edf3 57
eencae 0:df3b9e41edf3 58 #include "mbed.h"
eencae 0:df3b9e41edf3 59 #include "MMA8452.h"
eencae 0:df3b9e41edf3 60
eencae 0:df3b9e41edf3 61 MMA8452 mma8452(p28,p27); // SDA, SCL
eencae 0:df3b9e41edf3 62 Serial serial(USBTX,USBRX);
eencae 0:df3b9e41edf3 63
eencae 0:df3b9e41edf3 64 int main() {
eencae 0:df3b9e41edf3 65
eencae 0:df3b9e41edf3 66 mma8452.init(); // 100 Hz update rate, ±4g scale
eencae 0:df3b9e41edf3 67
eencae 0:df3b9e41edf3 68 Acceleration acceleration; // Accleration structure declared in MMA8452 class
eencae 0:df3b9e41edf3 69
eencae 0:df3b9e41edf3 70 while(1) {
eencae 0:df3b9e41edf3 71
eencae 0:df3b9e41edf3 72 acceleration = mma8452.readValues(); // read current values and print over serial port
eencae 0:df3b9e41edf3 73 serial.printf("x = %.2f g y = %.2f g z = %.2f g\n",acceleration.x,acceleration.y,acceleration.z);
eencae 0:df3b9e41edf3 74 wait(0.1); // short delay until next reading
eencae 0:df3b9e41edf3 75
eencae 0:df3b9e41edf3 76 }
eencae 0:df3b9e41edf3 77
eencae 0:df3b9e41edf3 78 }
eencae 0:df3b9e41edf3 79
eencae 0:df3b9e41edf3 80
eencae 0:df3b9e41edf3 81 * @endcode
eencae 0:df3b9e41edf3 82 */
eencae 0:df3b9e41edf3 83 class MMA8452
eencae 0:df3b9e41edf3 84 {
eencae 0:df3b9e41edf3 85
eencae 0:df3b9e41edf3 86 public:
eencae 0:df3b9e41edf3 87 /** Create a MMA8452 object connected to the specified pins
eencae 0:df3b9e41edf3 88 *
eencae 0:df3b9e41edf3 89 * @param sdaPin - mbed SDA pin
eencae 0:df3b9e41edf3 90 * @param sclPin - mbed SCL pin
eencae 0:df3b9e41edf3 91 *
eencae 0:df3b9e41edf3 92 */
eencae 0:df3b9e41edf3 93 MMA8452(PinName sdaPin, PinName sclPin);
eencae 0:df3b9e41edf3 94
eencae 0:df3b9e41edf3 95 /** Initialise accelerometer
eencae 0:df3b9e41edf3 96 *
eencae 0:df3b9e41edf3 97 * Powers up the accelerometer, sets 100 Hz update rate and ±4g scale
eencae 0:df3b9e41edf3 98 */
eencae 0:df3b9e41edf3 99 void init();
ml13emds 1:584301c98fb8 100 void transient_counting();
ml13emds 1:584301c98fb8 101
ml13emds 1:584301c98fb8 102 Acceleration average();
eencae 0:df3b9e41edf3 103
eencae 0:df3b9e41edf3 104 /** Get values of acceleration
eencae 0:df3b9e41edf3 105 *
eencae 0:df3b9e41edf3 106 * Reads the x,y,z values in g's
eencae 0:df3b9e41edf3 107 * @returns an Acceleration structure with x,y,z members (float)
eencae 0:df3b9e41edf3 108 */
eencae 0:df3b9e41edf3 109 Acceleration readValues();
ml13emds 1:584301c98fb8 110 char readByteFromRegister(char reg); //change for public by Edson
eencae 0:df3b9e41edf3 111
eencae 0:df3b9e41edf3 112
eencae 0:df3b9e41edf3 113 private:
eencae 0:df3b9e41edf3 114 void sendByteToRegister(char byte,char reg);
eencae 0:df3b9e41edf3 115 void readBytesFromRegister(char reg,int numberOfBytes,char bytes[]);
eencae 0:df3b9e41edf3 116 void error();
eencae 0:df3b9e41edf3 117
eencae 0:df3b9e41edf3 118 public:
eencae 0:df3b9e41edf3 119
eencae 0:df3b9e41edf3 120 private: // private variables
eencae 0:df3b9e41edf3 121 I2C* i2c;
eencae 0:df3b9e41edf3 122 BusOut* leds;
eencae 0:df3b9e41edf3 123
eencae 0:df3b9e41edf3 124 };
eencae 0:df3b9e41edf3 125
eencae 0:df3b9e41edf3 126
eencae 0:df3b9e41edf3 127
eencae 0:df3b9e41edf3 128 #endif