Pololu Minimu-9 library

Committer:
bengo
Date:
Tue Feb 21 13:34:27 2012 +0000
Revision:
0:6ee4ef99c382
first release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bengo 0:6ee4ef99c382 1 /* mbed Minimu_9 Library version 0beta1
bengo 0:6ee4ef99c382 2 * Copyright (c) 2012 bengo
bengo 0:6ee4ef99c382 3 *
bengo 0:6ee4ef99c382 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
bengo 0:6ee4ef99c382 5 * of this software and associated documentation files (the "Software"), to deal
bengo 0:6ee4ef99c382 6 * in the Software without restriction, including without limitation the rights
bengo 0:6ee4ef99c382 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
bengo 0:6ee4ef99c382 8 * copies of the Software, and to permit persons to whom the Software is
bengo 0:6ee4ef99c382 9 * furnished to do so, subject to the following conditions:
bengo 0:6ee4ef99c382 10 *
bengo 0:6ee4ef99c382 11 * The above copyright notice and this permission notice shall be included in
bengo 0:6ee4ef99c382 12 * all copies or substantial portions of the Software.
bengo 0:6ee4ef99c382 13 *
bengo 0:6ee4ef99c382 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
bengo 0:6ee4ef99c382 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
bengo 0:6ee4ef99c382 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
bengo 0:6ee4ef99c382 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
bengo 0:6ee4ef99c382 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
bengo 0:6ee4ef99c382 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
bengo 0:6ee4ef99c382 20 * THE SOFTWARE.
bengo 0:6ee4ef99c382 21 */
bengo 0:6ee4ef99c382 22
bengo 0:6ee4ef99c382 23 #ifndef minimu_h
bengo 0:6ee4ef99c382 24 #define minimu9_h
bengo 0:6ee4ef99c382 25
bengo 0:6ee4ef99c382 26 #include "mbed.h"
bengo 0:6ee4ef99c382 27 #include <LSM303.h>
bengo 0:6ee4ef99c382 28 #include <L3G4200D.h>
bengo 0:6ee4ef99c382 29 #include <vector>
bengo 0:6ee4ef99c382 30
bengo 0:6ee4ef99c382 31 /** Minimu-9 accelerometer, magnetometer, gyroscope sensor controller library
bengo 0:6ee4ef99c382 32 *
bengo 0:6ee4ef99c382 33 * Example:
bengo 0:6ee4ef99c382 34 * @code
bengo 0:6ee4ef99c382 35 * #include "mbed.h"
bengo 0:6ee4ef99c382 36 * #include <minimu9.h>
bengo 0:6ee4ef99c382 37 * #include <vector>
bengo 0:6ee4ef99c382 38 *
bengo 0:6ee4ef99c382 39 * Serial pc(USBTX, USBRX); // tx, rx
bengo 0:6ee4ef99c382 40 *
bengo 0:6ee4ef99c382 41 * int main() {
bengo 0:6ee4ef99c382 42 *
bengo 0:6ee4ef99c382 43 * minimu9 minimu( p28, p27 );
bengo 0:6ee4ef99c382 44 *
bengo 0:6ee4ef99c382 45 * int status = minimu.getStatus();
bengo 0:6ee4ef99c382 46 * if( status == 0 ) {
bengo 0:6ee4ef99c382 47 * for( int i=0; i<100000; i++ ) {
bengo 0:6ee4ef99c382 48 * std::vector<int> data = minimu.read();
bengo 0:6ee4ef99c382 49 * if( status == 0 ) {
bengo 0:6ee4ef99c382 50 * pc.printf("\x1b[2J\x1b[f\x1b[33mLSM303 minimu read status: \x1b[32m%d\n\r", minimu.getStatus() );
bengo 0:6ee4ef99c382 51 * }
bengo 0:6ee4ef99c382 52 * else {
bengo 0:6ee4ef99c382 53 * pc.printf("\x1b[2J\x1b[f\x1b[33mLSM303 minimu read status: \x1b[31m%d\n\r", minimu.getStatus() );
bengo 0:6ee4ef99c382 54 * }
bengo 0:6ee4ef99c382 55 *
bengo 0:6ee4ef99c382 56 * pc.printf("\x1b[33mLSM303 acc: \x1b[37m%8d %8d %8d\n\r", (short)data[0], (short)data[1], (short)data[2] );
bengo 0:6ee4ef99c382 57 * pc.printf("\x1b[33mLSM303 mag: \x1b[37m%8d %8d %8d\n\r", (short)data[3], (short)data[4], (short)data[5] );
bengo 0:6ee4ef99c382 58 * pc.printf("\x1b[33mL3G4200D gyr: \x1b[37m%8d %8d %8d\n\r", (short)data[6], (short)data[7], (short)data[8] );
bengo 0:6ee4ef99c382 59 * wait( 1 );
bengo 0:6ee4ef99c382 60 * }
bengo 0:6ee4ef99c382 61 * }
bengo 0:6ee4ef99c382 62 * return( 0 );
bengo 0:6ee4ef99c382 63 * }
bengo 0:6ee4ef99c382 64 * @endcode
bengo 0:6ee4ef99c382 65 */
bengo 0:6ee4ef99c382 66
bengo 0:6ee4ef99c382 67 class minimu9 {
bengo 0:6ee4ef99c382 68
bengo 0:6ee4ef99c382 69 public:
bengo 0:6ee4ef99c382 70
bengo 0:6ee4ef99c382 71 /**
bengo 0:6ee4ef99c382 72 * Create a minimu9 object connected to the specified I2C pins
bengo 0:6ee4ef99c382 73 * @param sda I2C SDA pin
bengo 0:6ee4ef99c382 74 * @param scl I2C SCL pin
bengo 0:6ee4ef99c382 75 */
bengo 0:6ee4ef99c382 76 minimu9( PinName sda, PinName scl );
bengo 0:6ee4ef99c382 77
bengo 0:6ee4ef99c382 78 /**
bengo 0:6ee4ef99c382 79 * Return status code of prevoius function call
bengo 0:6ee4ef99c382 80 */
bengo 0:6ee4ef99c382 81 inline int getStatus( void ) { return( _status ); }
bengo 0:6ee4ef99c382 82
bengo 0:6ee4ef99c382 83 /**
bengo 0:6ee4ef99c382 84 * Read all three sensors vectors (accelerometer, magnetometer, gyroscope)
bengo 0:6ee4ef99c382 85 */
bengo 0:6ee4ef99c382 86 std::vector<short> read( void );
bengo 0:6ee4ef99c382 87
bengo 0:6ee4ef99c382 88 /**
bengo 0:6ee4ef99c382 89 * Read accelerometer vector
bengo 0:6ee4ef99c382 90 */
bengo 0:6ee4ef99c382 91 inline std::vector<short> accRead( void ) { return( _lsm.accRead() ); }
bengo 0:6ee4ef99c382 92
bengo 0:6ee4ef99c382 93 /**
bengo 0:6ee4ef99c382 94 * Read acceleration (in g units)
bengo 0:6ee4ef99c382 95 */
bengo 0:6ee4ef99c382 96 inline std::vector<float> acceleration( void ) { return( _lsm.acceleration() ); }
bengo 0:6ee4ef99c382 97
bengo 0:6ee4ef99c382 98 /**
bengo 0:6ee4ef99c382 99 * Read magnetometer vector
bengo 0:6ee4ef99c382 100 */
bengo 0:6ee4ef99c382 101 inline std::vector<short> magRead( void ) { return( _lsm.magRead() ); }
bengo 0:6ee4ef99c382 102
bengo 0:6ee4ef99c382 103 /**
bengo 0:6ee4ef99c382 104 * Read magnetic filed (in gauss)
bengo 0:6ee4ef99c382 105 */
bengo 0:6ee4ef99c382 106 inline std::vector<float> magneticField( void ) { return( _lsm.magneticField() ); }
bengo 0:6ee4ef99c382 107
bengo 0:6ee4ef99c382 108 /**
bengo 0:6ee4ef99c382 109 * Read gyroscope vector
bengo 0:6ee4ef99c382 110 */
bengo 0:6ee4ef99c382 111 inline std::vector<short> gyrRead( void ) { return( _l3g.read() ); }
bengo 0:6ee4ef99c382 112
bengo 0:6ee4ef99c382 113 /**
bengo 0:6ee4ef99c382 114 * Read angular velogity (in degrees per second)
bengo 0:6ee4ef99c382 115 */
bengo 0:6ee4ef99c382 116 inline std::vector<float> angularVelocity( void ) { return( _l3g.angularVelocity() ); }
bengo 0:6ee4ef99c382 117
bengo 0:6ee4ef99c382 118 /**
bengo 0:6ee4ef99c382 119 * Read temperature (in celsius)
bengo 0:6ee4ef99c382 120 */
bengo 0:6ee4ef99c382 121 inline int temperature( void ) { return( _l3g.temperature() ); }
bengo 0:6ee4ef99c382 122
bengo 0:6ee4ef99c382 123 /**
bengo 0:6ee4ef99c382 124 * Return LSM303 associated object
bengo 0:6ee4ef99c382 125 */
bengo 0:6ee4ef99c382 126 inline LSM303 getLSM303( void ) { return( _lsm ); }
bengo 0:6ee4ef99c382 127
bengo 0:6ee4ef99c382 128 /**
bengo 0:6ee4ef99c382 129 * Return L3G4200D associated object
bengo 0:6ee4ef99c382 130 */
bengo 0:6ee4ef99c382 131 inline L3G4200D getL3G4200D( void ) { return( _l3g ); }
bengo 0:6ee4ef99c382 132
bengo 0:6ee4ef99c382 133 private:
bengo 0:6ee4ef99c382 134
bengo 0:6ee4ef99c382 135 int _status;
bengo 0:6ee4ef99c382 136 I2C _i2c;
bengo 0:6ee4ef99c382 137 LSM303 _lsm;
bengo 0:6ee4ef99c382 138 L3G4200D _l3g;
bengo 0:6ee4ef99c382 139
bengo 0:6ee4ef99c382 140 };
bengo 0:6ee4ef99c382 141
bengo 0:6ee4ef99c382 142 #endif // minimu9_h