Library for the MMA7660 triple axis accelerometer

Dependents:   Websocket_Ethernet_acc app-board-Sprint-WS-Acc app-board-Ethernet-Websocket app-board-Wifly-Websocket ... more

Committer:
Sissors
Date:
Sun Oct 14 08:02:53 2012 +0000
Revision:
0:7bc29a9ea016
Child:
1:8997a1b348dd
v0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sissors 0:7bc29a9ea016 1 #include "mbed.h"
Sissors 0:7bc29a9ea016 2
Sissors 0:7bc29a9ea016 3
Sissors 0:7bc29a9ea016 4 #ifndef MMA7660_H
Sissors 0:7bc29a9ea016 5 #define MMA7660_H
Sissors 0:7bc29a9ea016 6
Sissors 0:7bc29a9ea016 7 #define MMA7660_ADDRESS 0x98
Sissors 0:7bc29a9ea016 8 #define MMA7660_SENSITIVITY 21.33
Sissors 0:7bc29a9ea016 9
Sissors 0:7bc29a9ea016 10 #define MMA7660_XOUT_R 0x00
Sissors 0:7bc29a9ea016 11 #define MMA7660_YOUT_R 0x01
Sissors 0:7bc29a9ea016 12 #define MMA7660_ZOUT_R 0x02
Sissors 0:7bc29a9ea016 13 #define MMA7660_MODE_R 0x07
Sissors 0:7bc29a9ea016 14
Sissors 0:7bc29a9ea016 15 class MMA7660
Sissors 0:7bc29a9ea016 16 {
Sissors 0:7bc29a9ea016 17 public:
Sissors 0:7bc29a9ea016 18 /**
Sissors 0:7bc29a9ea016 19 * Creates a new MMA7660 object
Sissors 0:7bc29a9ea016 20 *
Sissors 0:7bc29a9ea016 21 * @param sda - I2C data pin
Sissors 0:7bc29a9ea016 22 * @param scl - I2C clock pin
Sissors 0:7bc29a9ea016 23 * @param interrupt - Interrupt pin (default = NC)
Sissors 0:7bc29a9ea016 24 */
Sissors 0:7bc29a9ea016 25 MMA7660(PinName sda, PinName scl, PinName interrupt = NC);
Sissors 0:7bc29a9ea016 26
Sissors 0:7bc29a9ea016 27 /**
Sissors 0:7bc29a9ea016 28 * Tests if communication is possible with the MMA7660
Sissors 0:7bc29a9ea016 29 *
Sissors 0:7bc29a9ea016 30 * Because the MMA7660 lacks a WHO_AM_I register, this function can only check
Sissors 0:7bc29a9ea016 31 * if there is an I2C device that responds to the MMA7660 address
Sissors 0:7bc29a9ea016 32 *
Sissors 0:7bc29a9ea016 33 * @param return - true for successfull connection, false for no connection
Sissors 0:7bc29a9ea016 34 */
Sissors 0:7bc29a9ea016 35 bool testConnection( void );
Sissors 0:7bc29a9ea016 36
Sissors 0:7bc29a9ea016 37 /**
Sissors 0:7bc29a9ea016 38 * Sets the active state of the MMA7660
Sissors 0:7bc29a9ea016 39 *
Sissors 0:7bc29a9ea016 40 * Note: This is unrelated to awake/sleep mode
Sissors 0:7bc29a9ea016 41 *
Sissors 0:7bc29a9ea016 42 * @param state - true for active, false for standby
Sissors 0:7bc29a9ea016 43 */
Sissors 0:7bc29a9ea016 44 void setActive( bool state);
Sissors 0:7bc29a9ea016 45
Sissors 0:7bc29a9ea016 46 /**
Sissors 0:7bc29a9ea016 47 * Reads acceleration data from the sensor
Sissors 0:7bc29a9ea016 48 *
Sissors 0:7bc29a9ea016 49 * When the parameter is a pointer to an integer array it will be the raw data.
Sissors 0:7bc29a9ea016 50 * When it is a pointer to a float array it will be the acceleration in g's
Sissors 0:7bc29a9ea016 51 *
Sissors 0:7bc29a9ea016 52 * @param data - pointer to array with length 3 where the acceleration data will be stores, X-Y-Z
Sissors 0:7bc29a9ea016 53 */
Sissors 0:7bc29a9ea016 54 void readData( int *data);
Sissors 0:7bc29a9ea016 55 void readData( float *data);
Sissors 0:7bc29a9ea016 56
Sissors 0:7bc29a9ea016 57 /** Get X-data
Sissors 0:7bc29a9ea016 58 *
Sissors 0:7bc29a9ea016 59 * @param return - X-acceleration in g's
Sissors 0:7bc29a9ea016 60 */
Sissors 0:7bc29a9ea016 61 float getX( void );
Sissors 0:7bc29a9ea016 62
Sissors 0:7bc29a9ea016 63 /** Get Y-data
Sissors 0:7bc29a9ea016 64 *
Sissors 0:7bc29a9ea016 65 * @param return - Y-acceleration in g's
Sissors 0:7bc29a9ea016 66 */
Sissors 0:7bc29a9ea016 67 float getY( void );
Sissors 0:7bc29a9ea016 68
Sissors 0:7bc29a9ea016 69 /** Get Z-data
Sissors 0:7bc29a9ea016 70 *
Sissors 0:7bc29a9ea016 71 * @param return - Z-acceleration in g's
Sissors 0:7bc29a9ea016 72 */
Sissors 0:7bc29a9ea016 73 float getZ( void );
Sissors 0:7bc29a9ea016 74
Sissors 0:7bc29a9ea016 75
Sissors 0:7bc29a9ea016 76 private:
Sissors 0:7bc29a9ea016 77
Sissors 0:7bc29a9ea016 78 /**
Sissors 0:7bc29a9ea016 79 * Writes data to the device, could be private, but public is handy so you can transmit directly to the MPU.
Sissors 0:7bc29a9ea016 80 *
Sissors 0:7bc29a9ea016 81 * @param adress - register address to write to
Sissors 0:7bc29a9ea016 82 * @param data - data to write
Sissors 0:7bc29a9ea016 83 */
Sissors 0:7bc29a9ea016 84 void write( char address, char data);
Sissors 0:7bc29a9ea016 85
Sissors 0:7bc29a9ea016 86 /**
Sissors 0:7bc29a9ea016 87 * Read data from the device, could be private, but public is handy so you can transmit directly to the MPU.
Sissors 0:7bc29a9ea016 88 *
Sissors 0:7bc29a9ea016 89 * @param adress - register address to write to
Sissors 0:7bc29a9ea016 90 * @return - data from the register specified by RA
Sissors 0:7bc29a9ea016 91 */
Sissors 0:7bc29a9ea016 92 char read( char adress);
Sissors 0:7bc29a9ea016 93
Sissors 0:7bc29a9ea016 94 /**
Sissors 0:7bc29a9ea016 95 * Read multiple regigsters from the device, more efficient than using multiple normal reads.
Sissors 0:7bc29a9ea016 96 *
Sissors 0:7bc29a9ea016 97 * @param adress - register address to write to
Sissors 0:7bc29a9ea016 98 * @param length - number of bytes to read
Sissors 0:7bc29a9ea016 99 * @param data - pointer where the data needs to be written to
Sissors 0:7bc29a9ea016 100 */
Sissors 0:7bc29a9ea016 101 void read( char adress, char *data, int length);
Sissors 0:7bc29a9ea016 102
Sissors 0:7bc29a9ea016 103 /**
Sissors 0:7bc29a9ea016 104 * Reads single axis
Sissors 0:7bc29a9ea016 105 */
Sissors 0:7bc29a9ea016 106 float getSingle(int number);
Sissors 0:7bc29a9ea016 107
Sissors 0:7bc29a9ea016 108 I2C _i2c;
Sissors 0:7bc29a9ea016 109 bool active;
Sissors 0:7bc29a9ea016 110 PinName _interrupt;
Sissors 0:7bc29a9ea016 111 float samplerate;
Sissors 0:7bc29a9ea016 112 };
Sissors 0:7bc29a9ea016 113
Sissors 0:7bc29a9ea016 114
Sissors 0:7bc29a9ea016 115 #endif