Class to read acceleration measurements from Dimension Engineering Buffered +-3g Tri-axis Accelerometer device.

Committer:
mkanli
Date:
Sun Feb 20 08:11:35 2011 +0000
Revision:
0:9b3ea4450259
First cut

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mkanli 0:9b3ea4450259 1 /**
mkanli 0:9b3ea4450259 2 * @file
mkanli 0:9b3ea4450259 3 * @section LICENSE
mkanli 0:9b3ea4450259 4 * Copyright (c) 2010 Mustafa Ozgur Kanli.
mkanli 0:9b3ea4450259 5 *
mkanli 0:9b3ea4450259 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
mkanli 0:9b3ea4450259 7 * of this software and associated documentation files (the "Software"),to deal
mkanli 0:9b3ea4450259 8 * in the Software without restriction, including without limitation the rights
mkanli 0:9b3ea4450259 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
mkanli 0:9b3ea4450259 10 * copies of the Software, and to permit persons to whom the Software is
mkanli 0:9b3ea4450259 11 * furnished to do so, subject to the following conditions:
mkanli 0:9b3ea4450259 12 *
mkanli 0:9b3ea4450259 13 * The above copyright notice and this permission notice shall be included in
mkanli 0:9b3ea4450259 14 * all copies or substantial portions of the Software.
mkanli 0:9b3ea4450259 15 *
mkanli 0:9b3ea4450259 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
mkanli 0:9b3ea4450259 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
mkanli 0:9b3ea4450259 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
mkanli 0:9b3ea4450259 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
mkanli 0:9b3ea4450259 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
mkanli 0:9b3ea4450259 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
mkanli 0:9b3ea4450259 22 * THE SOFTWARE.
mkanli 0:9b3ea4450259 23 *
mkanli 0:9b3ea4450259 24 * @section Description
mkanli 0:9b3ea4450259 25 * This class provides an object to obtain 3D acceleration measurements from a
mkanli 0:9b3ea4450259 26 * Dimension Engineering Buffered +-3g Tri-axis Accelerometer. This device uses
mkanli 0:9b3ea4450259 27 * the ADXL330. Measurements are obtained using 3 analog inputs.
mkanli 0:9b3ea4450259 28 *
mkanli 0:9b3ea4450259 29 */
mkanli 0:9b3ea4450259 30 #ifndef DIMENG_ACC3D_H_
mkanli 0:9b3ea4450259 31 #define DIMENG_ACC3D_H_
mkanli 0:9b3ea4450259 32
mkanli 0:9b3ea4450259 33 #include "mbed.h"
mkanli 0:9b3ea4450259 34
mkanli 0:9b3ea4450259 35 /**
mkanli 0:9b3ea4450259 36 * Acceleration due to gravity at sea level on Earth (m/s/s).
mkanli 0:9b3ea4450259 37 */
mkanli 0:9b3ea4450259 38 #define ACC_G 9.80665
mkanli 0:9b3ea4450259 39
mkanli 0:9b3ea4450259 40 /**
mkanli 0:9b3ea4450259 41 * Class to read acceleration measurements from Dimension Engineering
mkanli 0:9b3ea4450259 42 * Buffered +-3g Tri-axis Accelerometer device.
mkanli 0:9b3ea4450259 43 *
mkanli 0:9b3ea4450259 44 * Example
mkanli 0:9b3ea4450259 45 * @code
mkanli 0:9b3ea4450259 46 * #include "mbed.h"
mkanli 0:9b3ea4450259 47 * #include "DimEngAcc3D.h"
mkanli 0:9b3ea4450259 48 *
mkanli 0:9b3ea4450259 49 * int main() {
mkanli 0:9b3ea4450259 50 * DimEngAcc3D *acc;
mkanli 0:9b3ea4450259 51 *
mkanli 0:9b3ea4450259 52 * // Create and configure object for 3.3V powered device,
mkanli 0:9b3ea4450259 53 * acc = new DimEngAcc3D(p18, p19, p20);
mkanli 0:9b3ea4450259 54 * acc->setVoltage(3.3);
mkanli 0:9b3ea4450259 55 *
mkanli 0:9b3ea4450259 56 * while(1) {
mkanli 0:9b3ea4450259 57 * // Read.
mkanli 0:9b3ea4450259 58 * acc->read();
mkanli 0:9b3ea4450259 59 *
mkanli 0:9b3ea4450259 60 * // Print and delay 0.5s.
mkanli 0:9b3ea4450259 61 * printf("%.3f, %.3f, %.3f\r\n", acc->x, acc->y, acc->z);
mkanli 0:9b3ea4450259 62 * wait(0.5);
mkanli 0:9b3ea4450259 63 * }
mkanli 0:9b3ea4450259 64 * }
mkanli 0:9b3ea4450259 65 * @endcode
mkanli 0:9b3ea4450259 66 */
mkanli 0:9b3ea4450259 67 class DimEngAcc3D {
mkanli 0:9b3ea4450259 68
mkanli 0:9b3ea4450259 69 private:
mkanli 0:9b3ea4450259 70 float ref_voltage; //!< Supply/reference voltage (V).
mkanli 0:9b3ea4450259 71 float zero_point; //!< Zero g voltage output (V).
mkanli 0:9b3ea4450259 72 float sensitivity; //!< Sensitivity at reference voltage (V/g).
mkanli 0:9b3ea4450259 73 AnalogIn *ain_x; //!< For analog reads of acceleration in x axis.
mkanli 0:9b3ea4450259 74 AnalogIn *ain_y; //!< For analog reads of acceleration in y axis.
mkanli 0:9b3ea4450259 75 AnalogIn *ain_z; //!< For analog reads of acceleration in z axis.
mkanli 0:9b3ea4450259 76
mkanli 0:9b3ea4450259 77 /**
mkanli 0:9b3ea4450259 78 * Initialize private variables according to the specified
mkanli 0:9b3ea4450259 79 * reference voltage
mkanli 0:9b3ea4450259 80 * @param voltage The specified voltage.
mkanli 0:9b3ea4450259 81 */
mkanli 0:9b3ea4450259 82 void initFromVoltage(float voltage);
mkanli 0:9b3ea4450259 83
mkanli 0:9b3ea4450259 84 public:
mkanli 0:9b3ea4450259 85 float x; //!< Most recent acceleration in x axis (m/s/s).
mkanli 0:9b3ea4450259 86 float y; //!< Most recent acceleration in y axis (m/s/s).
mkanli 0:9b3ea4450259 87 float z; //!< Most recent acceleration in z axis (m/s/s).
mkanli 0:9b3ea4450259 88
mkanli 0:9b3ea4450259 89 /**
mkanli 0:9b3ea4450259 90 * Constructor.
mkanli 0:9b3ea4450259 91 *
mkanli 0:9b3ea4450259 92 * @param pin_x Pin connected to output x of device.
mkanli 0:9b3ea4450259 93 * @param pin_y Pin connected to output y of device.
mkanli 0:9b3ea4450259 94 * @param pin_z Pin connected to output z of device.
mkanli 0:9b3ea4450259 95 * @note Unused/unconnected outputs may be specified as NC.
mkanli 0:9b3ea4450259 96 */
mkanli 0:9b3ea4450259 97 DimEngAcc3D(PinName pin_x, PinName pin_y, PinName pin_z);
mkanli 0:9b3ea4450259 98
mkanli 0:9b3ea4450259 99 /**
mkanli 0:9b3ea4450259 100 * Destructor.
mkanli 0:9b3ea4450259 101 */
mkanli 0:9b3ea4450259 102 ~DimEngAcc3D(void);
mkanli 0:9b3ea4450259 103
mkanli 0:9b3ea4450259 104 /**
mkanli 0:9b3ea4450259 105 * Specify the supply voltage used by the device.
mkanli 0:9b3ea4450259 106 *
mkanli 0:9b3ea4450259 107 * @param voltage The specified voltage (default 3.3)
mkanli 0:9b3ea4450259 108 * @note This is important for correct conversion of the voltage
mkanli 0:9b3ea4450259 109 * from output pins of device into acceleration in m/s/s.
mkanli 0:9b3ea4450259 110 */
mkanli 0:9b3ea4450259 111 void setVoltage(float voltage);
mkanli 0:9b3ea4450259 112
mkanli 0:9b3ea4450259 113 /**
mkanli 0:9b3ea4450259 114 * Read acceleration and store in x, y & z.
mkanli 0:9b3ea4450259 115 */
mkanli 0:9b3ea4450259 116 void read(void);
mkanli 0:9b3ea4450259 117 };
mkanli 0:9b3ea4450259 118
mkanli 0:9b3ea4450259 119 #endif