Library for MMA7660FC Accelerometer device

Dependents:   TestCode_MMA7660FC 3D_Accelerometer_Tester RTOS-aap-board-modules embed_Grove_3-Axis_Digital_Accelerometer ... more

Committer:
edodm85
Date:
Wed Aug 07 19:50:09 2013 +0000
Revision:
8:122af194c74b
Parent:
7:74eb2a4803ba
Added the functions read_Side() and read_Orientation()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
edodm85 0:eb135a8de811 1 // Author: Edoardo De Marchi
edodm85 0:eb135a8de811 2 /* Copyright (C) 2012 mbed.org, MIT License
edodm85 0:eb135a8de811 3 *
edodm85 0:eb135a8de811 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
edodm85 0:eb135a8de811 5 * and associated documentation files (the "Software"), to deal in the Software without restriction,
edodm85 0:eb135a8de811 6 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
edodm85 0:eb135a8de811 7 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
edodm85 0:eb135a8de811 8 * furnished to do so, subject to the following conditions:
edodm85 0:eb135a8de811 9 *
edodm85 0:eb135a8de811 10 * The above copyright notice and this permission notice shall be included in all copies or
edodm85 0:eb135a8de811 11 * substantial portions of the Software.
edodm85 0:eb135a8de811 12 *
edodm85 0:eb135a8de811 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
edodm85 0:eb135a8de811 14 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
edodm85 0:eb135a8de811 15 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
edodm85 0:eb135a8de811 16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
edodm85 0:eb135a8de811 17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
edodm85 0:eb135a8de811 18 */
edodm85 0:eb135a8de811 19
edodm85 0:eb135a8de811 20
edodm85 0:eb135a8de811 21 #ifndef MBED_MMA7660FC_H
edodm85 0:eb135a8de811 22 #define MBED_MMA7660FC_H
edodm85 0:eb135a8de811 23
edodm85 0:eb135a8de811 24 #include "mbed.h"
edodm85 7:74eb2a4803ba 25
edodm85 7:74eb2a4803ba 26
edodm85 7:74eb2a4803ba 27 #define OUT_X 0x00 // [6:0] are Read Only 6-bit output value X (XOUT[5] is 0 if the g direction is positive, 1 is negative)
edodm85 7:74eb2a4803ba 28 #define OUT_Y 0x01 // [6:0] are Read Only 6-bit output value Y (YOUT[5] is 0 if the g direction is positive, 1 is negative)
edodm85 7:74eb2a4803ba 29 #define OUT_Z 0x02 // [6:0] are Read Only 6-bit output value Z (ZOUT[5] is 0 if the g direction is positive, 1 is negative)
edodm85 7:74eb2a4803ba 30 #define TILT_STATUS 0x03 // Tilt Status (Read only)
edodm85 7:74eb2a4803ba 31 #define SRST_STATUS 0x04 // Sample Rate Status Register (Read only)
edodm85 7:74eb2a4803ba 32 #define SPCNT_STATUS 0x05 // Sleep Count Register (Read/Write)
edodm85 7:74eb2a4803ba 33 #define INTSU_STATUS 0x06 // Interrupt Setup Register
edodm85 7:74eb2a4803ba 34 #define MODE_STATUS 0x07 // Mode Register (Read/Write)
edodm85 7:74eb2a4803ba 35 #define SR_STATUS 0x08 // Auto-Wake and Active Mode Portrait/Landscape Samples per Seconds Register (Read/Write)
edodm85 7:74eb2a4803ba 36 #define PDET_STATUS 0x09 // Tap/Pulse Detection Register (Read/Write)
edodm85 7:74eb2a4803ba 37 #define PD_STATUS 0xA // Tap/Pulse Debounce Count Register (Read/Write)
edodm85 7:74eb2a4803ba 38
edodm85 7:74eb2a4803ba 39
edodm85 7:74eb2a4803ba 40
edodm85 7:74eb2a4803ba 41
edodm85 0:eb135a8de811 42
edodm85 0:eb135a8de811 43 /** Accelerometer MMA7660FC class
edodm85 0:eb135a8de811 44 *
edodm85 0:eb135a8de811 45 * Example:
edodm85 0:eb135a8de811 46 * @code
edodm85 0:eb135a8de811 47 *
edodm85 0:eb135a8de811 48 * #include "mbed.h"
edodm85 0:eb135a8de811 49 * #include "MMA7660FC.h"
edodm85 0:eb135a8de811 50 *
edodm85 0:eb135a8de811 51 * #define ADDR_MMA7660 0x98
edodm85 0:eb135a8de811 52 *
edodm85 0:eb135a8de811 53 * MMA7660FC Acc(p28, p27, ADDR_MMA7660);
edodm85 0:eb135a8de811 54 * serial pc(USBTX, USBRX);
edodm85 0:eb135a8de811 55 *
edodm85 0:eb135a8de811 56 * int main()
edodm85 0:eb135a8de811 57 * {
edodm85 0:eb135a8de811 58 * Acc.init();
edodm85 0:eb135a8de811 59 * while(1)
edodm85 0:eb135a8de811 60 * {
edodm85 0:eb135a8de811 61 * int x=0, y=0, z=0;
edodm85 4:6e931d9bbf4b 62 * Acc.read_Tilt(&x, &y, &z);
edodm85 4:6e931d9bbf4b 63 * pc.printf("Tilt x: %2.2f degree \n", x); // Print the tilt orientation of the X axis
edodm85 4:6e931d9bbf4b 64 * pc.printf("Tilt y: %2.2f degree \n", y); // Print the tilt orientation of the Y axis
edodm85 4:6e931d9bbf4b 65 * pc.printf("Tilt z: %2.2f degree \n", z); // Print the tilt orientation of the Z axis
edodm85 0:eb135a8de811 66 * wait(1);
edodm85 0:eb135a8de811 67 * }
edodm85 0:eb135a8de811 68 * }
edodm85 0:eb135a8de811 69 * @endcode
edodm85 0:eb135a8de811 70 */
edodm85 0:eb135a8de811 71 class MMA7660FC
edodm85 0:eb135a8de811 72 {
edodm85 0:eb135a8de811 73 public:
edodm85 0:eb135a8de811 74
edodm85 0:eb135a8de811 75
edodm85 8:122af194c74b 76 /** Creates an MMA7660FC object connected to the specified I2C object
edodm85 0:eb135a8de811 77 *
edodm85 0:eb135a8de811 78 * @param sda I2C data port
edodm85 0:eb135a8de811 79 * @param scl I2C clock port
edodm85 0:eb135a8de811 80 * @param addr The address of the MMA7660FC
edodm85 0:eb135a8de811 81 */
edodm85 0:eb135a8de811 82 MMA7660FC(PinName sda, PinName scl, int addr);
edodm85 0:eb135a8de811 83
edodm85 0:eb135a8de811 84 /** Destroys an MMA7660FC object
edodm85 0:eb135a8de811 85 *
edodm85 0:eb135a8de811 86 */
edodm85 0:eb135a8de811 87 ~MMA7660FC();
edodm85 0:eb135a8de811 88
edodm85 1:6e7a2df4f149 89 /** Initialization of device MMA7660FC (required)
edodm85 0:eb135a8de811 90 *
edodm85 0:eb135a8de811 91 */
edodm85 0:eb135a8de811 92 void init();
edodm85 0:eb135a8de811 93
edodm85 4:6e931d9bbf4b 94 /** Read the Tilt Angle using Three Axis
edodm85 0:eb135a8de811 95 *
edodm85 4:6e931d9bbf4b 96 * @param *x Value of x tilt
edodm85 4:6e931d9bbf4b 97 * @param *y Value of y tilt
edodm85 4:6e931d9bbf4b 98 * @param *z Value of z tilt
edodm85 0:eb135a8de811 99 */
edodm85 4:6e931d9bbf4b 100 void read_Tilt(float *x, float *y, float *z);
edodm85 3:df25c72e16be 101
edodm85 8:122af194c74b 102 /** Reads the x register of the MMA7660FC
edodm85 3:df25c72e16be 103 *
edodm85 3:df25c72e16be 104 * @returns The value of x acceleration
edodm85 3:df25c72e16be 105 */
edodm85 5:d2f90c0be13f 106 int read_x();
edodm85 3:df25c72e16be 107
edodm85 8:122af194c74b 108 /** Reads the y register of the MMA7660FC
edodm85 3:df25c72e16be 109 *
edodm85 3:df25c72e16be 110 * @returns The value of y acceleration
edodm85 3:df25c72e16be 111 */
edodm85 5:d2f90c0be13f 112 int read_y();
edodm85 3:df25c72e16be 113
edodm85 8:122af194c74b 114 /** Reads the z register of the MMA7660FC
edodm85 3:df25c72e16be 115 *
edodm85 3:df25c72e16be 116 * @returns The value of z acceleration
edodm85 3:df25c72e16be 117 */
edodm85 5:d2f90c0be13f 118 int read_z();
edodm85 8:122af194c74b 119
edodm85 8:122af194c74b 120 /** Reads the Front or Back position of the device
edodm85 8:122af194c74b 121 *
edodm85 8:122af194c74b 122 * @returns The Front or Back position
edodm85 8:122af194c74b 123 */
edodm85 8:122af194c74b 124 char const* read_Side();
edodm85 8:122af194c74b 125
edodm85 8:122af194c74b 126 /** Reads the Orientation of the device
edodm85 8:122af194c74b 127 *
edodm85 8:122af194c74b 128 * @returns The Left or Right or Down or Up Orientation
edodm85 8:122af194c74b 129 */
edodm85 8:122af194c74b 130 char const* read_Orientation();
edodm85 0:eb135a8de811 131
edodm85 8:122af194c74b 132 /** Reads from specified MMA7660FC register
edodm85 0:eb135a8de811 133 *
edodm85 0:eb135a8de811 134 * @param addr The internal registeraddress of the MMA7660FC
edodm85 0:eb135a8de811 135 * @returns The value of the register
edodm85 0:eb135a8de811 136 */
edodm85 0:eb135a8de811 137 char read_reg(char addr);
edodm85 0:eb135a8de811 138
edodm85 8:122af194c74b 139 /** Writes to specified MMA7660FC register
edodm85 0:eb135a8de811 140 *
edodm85 0:eb135a8de811 141 * @param addr The internal registeraddress of the MMA7660FC
edodm85 0:eb135a8de811 142 * @param data New value of the register
edodm85 0:eb135a8de811 143 */
edodm85 0:eb135a8de811 144 void write_reg(char addr, char data);
edodm85 0:eb135a8de811 145
edodm85 8:122af194c74b 146 /** Checks if the address exist on an I2C bus
edodm85 7:74eb2a4803ba 147 *
edodm85 7:74eb2a4803ba 148 * @returns 0 on success, or non-0 on failure
edodm85 7:74eb2a4803ba 149 */
edodm85 7:74eb2a4803ba 150 int check();
edodm85 7:74eb2a4803ba 151
edodm85 0:eb135a8de811 152
edodm85 0:eb135a8de811 153 private:
edodm85 0:eb135a8de811 154 I2C m_i2c;
edodm85 7:74eb2a4803ba 155 //int m_addr;
edodm85 6:10aa804dee97 156 char SPI_R_Address;
edodm85 6:10aa804dee97 157 char SPI_W_Address;
edodm85 0:eb135a8de811 158 };
edodm85 0:eb135a8de811 159
edodm85 0:eb135a8de811 160 #endif