An i2c version of mbed LIS302 Accelerometer Library by sford, cstyles, wreynolds. The return data is raw yet. It seems from -0x55 to 0x55 though I think it returns -0x7F to 0x7F. Humm... Why?

Committer:
kazushi2008
Date:
Sun Oct 10 06:17:08 2010 +0000
Revision:
0:4ef465f255d0
the first version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kazushi2008 0:4ef465f255d0 1 /* mbed LIS302 Accelerometer Library
kazushi2008 0:4ef465f255d0 2 * Copyright (c) 2008-2010, sford, cstyles, wreynolds
kazushi2008 0:4ef465f255d0 3 * modified for i2c version by Kazushi Mukaiyama 2010
kazushi2008 0:4ef465f255d0 4 *
kazushi2008 0:4ef465f255d0 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
kazushi2008 0:4ef465f255d0 6 * of this software and associated documentation files (the "Software"), to deal
kazushi2008 0:4ef465f255d0 7 * in the Software without restriction, including without limitation the rights
kazushi2008 0:4ef465f255d0 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
kazushi2008 0:4ef465f255d0 9 * copies of the Software, and to permit persons to whom the Software is
kazushi2008 0:4ef465f255d0 10 * furnished to do so, subject to the following conditions:
kazushi2008 0:4ef465f255d0 11 *
kazushi2008 0:4ef465f255d0 12 * The above copyright notice and this permission notice shall be included in
kazushi2008 0:4ef465f255d0 13 * all copies or substantial portions of the Software.
kazushi2008 0:4ef465f255d0 14 *
kazushi2008 0:4ef465f255d0 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
kazushi2008 0:4ef465f255d0 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
kazushi2008 0:4ef465f255d0 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
kazushi2008 0:4ef465f255d0 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
kazushi2008 0:4ef465f255d0 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kazushi2008 0:4ef465f255d0 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
kazushi2008 0:4ef465f255d0 21 * THE SOFTWARE.
kazushi2008 0:4ef465f255d0 22 */
kazushi2008 0:4ef465f255d0 23
kazushi2008 0:4ef465f255d0 24 #ifndef MBED_LIS302I2C_H
kazushi2008 0:4ef465f255d0 25 #define MBED_LIS302I2C_H
kazushi2008 0:4ef465f255d0 26
kazushi2008 0:4ef465f255d0 27 #include "mbed.h"
kazushi2008 0:4ef465f255d0 28
kazushi2008 0:4ef465f255d0 29 /** An interface for the LIS302 triple axis I2C accelerometer
kazushi2008 0:4ef465f255d0 30 *
kazushi2008 0:4ef465f255d0 31 * @code
kazushi2008 0:4ef465f255d0 32 * // Print out the Z axis acceleration
kazushi2008 0:4ef465f255d0 33 * #include "mbed.h"
kazushi2008 0:4ef465f255d0 34 * #include "LIS302i2c.h"
kazushi2008 0:4ef465f255d0 35 *
kazushi2008 0:4ef465f255d0 36 * LIS302i2c acc(p28, p27); // sda, scl
kazushi2008 0:4ef465f255d0 37 *
kazushi2008 0:4ef465f255d0 38 * int main() {
kazushi2008 0:4ef465f255d0 39 * while(1) {
kazushi2008 0:4ef465f255d0 40 * printf("Z axis acceleration = %.2f\n", acc.getZ());
kazushi2008 0:4ef465f255d0 41 * wait(0.1);
kazushi2008 0:4ef465f255d0 42 * }
kazushi2008 0:4ef465f255d0 43 * }
kazushi2008 0:4ef465f255d0 44 * @endcode
kazushi2008 0:4ef465f255d0 45 */
kazushi2008 0:4ef465f255d0 46 class LIS302i2c {
kazushi2008 0:4ef465f255d0 47 public:
kazushi2008 0:4ef465f255d0 48
kazushi2008 0:4ef465f255d0 49 /** Create an LIS302 interface, connected to the specified pins
kazushi2008 0:4ef465f255d0 50 *
kazushi2008 0:4ef465f255d0 51 * @param sda I2C data line pin
kazushi2008 0:4ef465f255d0 52 * @param scl I2C clock line pin
kazushi2008 0:4ef465f255d0 53 */
kazushi2008 0:4ef465f255d0 54 LIS302i2c(int addr, PinName sda, PinName scl);
kazushi2008 0:4ef465f255d0 55
kazushi2008 0:4ef465f255d0 56 float x, y, z;
kazushi2008 0:4ef465f255d0 57
kazushi2008 0:4ef465f255d0 58 void update();
kazushi2008 0:4ef465f255d0 59
kazushi2008 0:4ef465f255d0 60 /** Read the X axis acceleration
kazushi2008 0:4ef465f255d0 61 *
kazushi2008 0:4ef465f255d0 62 * @return A floating-point value representing acceleration in g
kazushi2008 0:4ef465f255d0 63 */
kazushi2008 0:4ef465f255d0 64 float getX();
kazushi2008 0:4ef465f255d0 65
kazushi2008 0:4ef465f255d0 66 /** Read the Y axis acceleration
kazushi2008 0:4ef465f255d0 67 *
kazushi2008 0:4ef465f255d0 68 * @return A floating-point value representing acceleration in g
kazushi2008 0:4ef465f255d0 69 */
kazushi2008 0:4ef465f255d0 70 float getY();
kazushi2008 0:4ef465f255d0 71
kazushi2008 0:4ef465f255d0 72 /** Read the Z axis acceleration
kazushi2008 0:4ef465f255d0 73 *
kazushi2008 0:4ef465f255d0 74 * @return - A floating-point value representing acceleration in g
kazushi2008 0:4ef465f255d0 75 */
kazushi2008 0:4ef465f255d0 76 float getZ();
kazushi2008 0:4ef465f255d0 77
kazushi2008 0:4ef465f255d0 78 /** Select the range of the accelerometer
kazushi2008 0:4ef465f255d0 79 *
kazushi2008 0:4ef465f255d0 80 * @param range 0 = 2g, 1 = 8g
kazushi2008 0:4ef465f255d0 81 */
kazushi2008 0:4ef465f255d0 82 void range(int g);
kazushi2008 0:4ef465f255d0 83
kazushi2008 0:4ef465f255d0 84 /** Configure the minima and maxima for the axes to linearise the readings
kazushi2008 0:4ef465f255d0 85 *
kazushi2008 0:4ef465f255d0 86 * @param maxx float defining the maximum X value
kazushi2008 0:4ef465f255d0 87 * @param minx float defining the minimum X value
kazushi2008 0:4ef465f255d0 88 * @param maxy float defining the maximum Y value
kazushi2008 0:4ef465f255d0 89 * @param miny float defining the minimum Y value
kazushi2008 0:4ef465f255d0 90 * @param maxz float defining the maximum Z value
kazushi2008 0:4ef465f255d0 91 * @param minz float defining the minimum Z value
kazushi2008 0:4ef465f255d0 92 */
kazushi2008 0:4ef465f255d0 93 void calibrate(float maxx = 1, float minx = -1, float maxy = 1, float miny = -1, float maxz = 1, float minz = -1);
kazushi2008 0:4ef465f255d0 94
kazushi2008 0:4ef465f255d0 95 private:
kazushi2008 0:4ef465f255d0 96 I2C _i2c;
kazushi2008 0:4ef465f255d0 97 int _addr;
kazushi2008 0:4ef465f255d0 98 char _cmd[6];
kazushi2008 0:4ef465f255d0 99
kazushi2008 0:4ef465f255d0 100 char whoami();
kazushi2008 0:4ef465f255d0 101 char status();
kazushi2008 0:4ef465f255d0 102
kazushi2008 0:4ef465f255d0 103 float _factor;
kazushi2008 0:4ef465f255d0 104 float _maxx, _minx;
kazushi2008 0:4ef465f255d0 105 float _maxy, _miny;
kazushi2008 0:4ef465f255d0 106 float _maxz, _minz;
kazushi2008 0:4ef465f255d0 107 };
kazushi2008 0:4ef465f255d0 108
kazushi2008 0:4ef465f255d0 109 #endif