Pololu Minimu-9 library
minimu9.h@0:6ee4ef99c382, 2012-02-21 (annotated)
- Committer:
- bengo
- Date:
- Tue Feb 21 13:34:27 2012 +0000
- Revision:
- 0:6ee4ef99c382
first release
Who changed what in which revision?
User | Revision | Line number | New 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 |