LSM9DS1
Dependents: Zumipen MIX_DEVICE
LSM9DS1.cpp@0:8e17d3584f99, 2017-02-20 (annotated)
- Committer:
- tona0516
- Date:
- Mon Feb 20 07:11:57 2017 +0000
- Revision:
- 0:8e17d3584f99
Zumipen???????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tona0516 | 0:8e17d3584f99 | 1 | /** |
tona0516 | 0:8e17d3584f99 | 2 | * Includes |
tona0516 | 0:8e17d3584f99 | 3 | */ |
tona0516 | 0:8e17d3584f99 | 4 | #include "LSM9DS1.h" |
tona0516 | 0:8e17d3584f99 | 5 | |
tona0516 | 0:8e17d3584f99 | 6 | LSM9DS1::LSM9DS1(PinName sda, PinName scl) : connection(sda, scl) { |
tona0516 | 0:8e17d3584f99 | 7 | //Initializations: |
tona0516 | 0:8e17d3584f99 | 8 | this->setSleepMode(false); |
tona0516 | 0:8e17d3584f99 | 9 | this->initCTRL_REG1_G(); |
tona0516 | 0:8e17d3584f99 | 10 | // this->initORIENT_CFG_G(); |
tona0516 | 0:8e17d3584f99 | 11 | // this->initCTRL_REG4(); |
tona0516 | 0:8e17d3584f99 | 12 | this->initCTRL_REG6_XL(); |
tona0516 | 0:8e17d3584f99 | 13 | currentGyroRange = 0; |
tona0516 | 0:8e17d3584f99 | 14 | currentAcceleroRange = 0; |
tona0516 | 0:8e17d3584f99 | 15 | } |
tona0516 | 0:8e17d3584f99 | 16 | |
tona0516 | 0:8e17d3584f99 | 17 | //-------------------------------------------------- |
tona0516 | 0:8e17d3584f99 | 18 | //-------------------General------------------------ |
tona0516 | 0:8e17d3584f99 | 19 | //-------------------------------------------------- |
tona0516 | 0:8e17d3584f99 | 20 | |
tona0516 | 0:8e17d3584f99 | 21 | void LSM9DS1::write(char address, char data) { |
tona0516 | 0:8e17d3584f99 | 22 | char temp[2]; |
tona0516 | 0:8e17d3584f99 | 23 | temp[0]=address; |
tona0516 | 0:8e17d3584f99 | 24 | temp[1]=data; |
tona0516 | 0:8e17d3584f99 | 25 | |
tona0516 | 0:8e17d3584f99 | 26 | connection.write(LSM9DS1_ADDRESS * 2,temp,2); |
tona0516 | 0:8e17d3584f99 | 27 | } |
tona0516 | 0:8e17d3584f99 | 28 | |
tona0516 | 0:8e17d3584f99 | 29 | char LSM9DS1::read(char address) { |
tona0516 | 0:8e17d3584f99 | 30 | char retval; |
tona0516 | 0:8e17d3584f99 | 31 | connection.write(LSM9DS1_ADDRESS * 2, &address, 1, true); |
tona0516 | 0:8e17d3584f99 | 32 | connection.read(LSM9DS1_ADDRESS * 2, &retval, 1); |
tona0516 | 0:8e17d3584f99 | 33 | return retval; |
tona0516 | 0:8e17d3584f99 | 34 | } |
tona0516 | 0:8e17d3584f99 | 35 | |
tona0516 | 0:8e17d3584f99 | 36 | void LSM9DS1::read(char address, char *data, int length) { |
tona0516 | 0:8e17d3584f99 | 37 | connection.write(LSM9DS1_ADDRESS * 2, &address, 1, true); |
tona0516 | 0:8e17d3584f99 | 38 | connection.read(LSM9DS1_ADDRESS * 2, data, length); |
tona0516 | 0:8e17d3584f99 | 39 | } |
tona0516 | 0:8e17d3584f99 | 40 | |
tona0516 | 0:8e17d3584f99 | 41 | bool LSM9DS1::testConnection( void ) { |
tona0516 | 0:8e17d3584f99 | 42 | char temp; |
tona0516 | 0:8e17d3584f99 | 43 | temp = this->read(LSM9DS1_WHO_AM_I_REG); |
tona0516 | 0:8e17d3584f99 | 44 | return (temp == (LSM9DS1_ADDRESS & 0x68)); |
tona0516 | 0:8e17d3584f99 | 45 | } |
tona0516 | 0:8e17d3584f99 | 46 | |
tona0516 | 0:8e17d3584f99 | 47 | void LSM9DS1::setSleepMode(bool state) { |
tona0516 | 0:8e17d3584f99 | 48 | char temp; |
tona0516 | 0:8e17d3584f99 | 49 | temp = this->read(LSM9DS1_CTRL_REG9); |
tona0516 | 0:8e17d3584f99 | 50 | if (state == true) |
tona0516 | 0:8e17d3584f99 | 51 | temp |= 1<<LSM9DS1_SLP_BIT; |
tona0516 | 0:8e17d3584f99 | 52 | if (state == false) |
tona0516 | 0:8e17d3584f99 | 53 | temp &= ~(1<<LSM9DS1_SLP_BIT); |
tona0516 | 0:8e17d3584f99 | 54 | this->write(LSM9DS1_CTRL_REG9 , temp); |
tona0516 | 0:8e17d3584f99 | 55 | } |
tona0516 | 0:8e17d3584f99 | 56 | |
tona0516 | 0:8e17d3584f99 | 57 | void LSM9DS1::initCTRL_REG1_G( void ){ |
tona0516 | 0:8e17d3584f99 | 58 | this->write(LSM9DS1_CTRL_REG1_G, 0xC3); |
tona0516 | 0:8e17d3584f99 | 59 | } |
tona0516 | 0:8e17d3584f99 | 60 | |
tona0516 | 0:8e17d3584f99 | 61 | void LSM9DS1::initORIENT_CFG_G( void ){ |
tona0516 | 0:8e17d3584f99 | 62 | this->write(LSM9DS1_ORIENT_CFG_G, 0x38); |
tona0516 | 0:8e17d3584f99 | 63 | } |
tona0516 | 0:8e17d3584f99 | 64 | |
tona0516 | 0:8e17d3584f99 | 65 | void LSM9DS1::initCTRL_REG4( void ){ |
tona0516 | 0:8e17d3584f99 | 66 | this->write(LSM9DS1_CTRL_REG4, 0x39); |
tona0516 | 0:8e17d3584f99 | 67 | } |
tona0516 | 0:8e17d3584f99 | 68 | |
tona0516 | 0:8e17d3584f99 | 69 | void LSM9DS1::initCTRL_REG6_XL( void ){ |
tona0516 | 0:8e17d3584f99 | 70 | this->write(LSM9DS1_CTRL_REG6_XL, 0xC3); |
tona0516 | 0:8e17d3584f99 | 71 | } |
tona0516 | 0:8e17d3584f99 | 72 | |
tona0516 | 0:8e17d3584f99 | 73 | |
tona0516 | 0:8e17d3584f99 | 74 | //-------------------------------------------------- |
tona0516 | 0:8e17d3584f99 | 75 | //----------------Accelerometer--------------------- |
tona0516 | 0:8e17d3584f99 | 76 | //-------------------------------------------------- |
tona0516 | 0:8e17d3584f99 | 77 | |
tona0516 | 0:8e17d3584f99 | 78 | void LSM9DS1::setAcceleroRange( char range ) { |
tona0516 | 0:8e17d3584f99 | 79 | char temp; |
tona0516 | 0:8e17d3584f99 | 80 | range = range & 0x03; |
tona0516 | 0:8e17d3584f99 | 81 | currentAcceleroRange = range; |
tona0516 | 0:8e17d3584f99 | 82 | temp = this->read(LSM9DS1_CTRL_REG6_XL); |
tona0516 | 0:8e17d3584f99 | 83 | temp &= ~(3<<3); |
tona0516 | 0:8e17d3584f99 | 84 | temp = temp + (range<<3); |
tona0516 | 0:8e17d3584f99 | 85 | this->write(LSM9DS1_CTRL_REG6_XL, temp); |
tona0516 | 0:8e17d3584f99 | 86 | } |
tona0516 | 0:8e17d3584f99 | 87 | |
tona0516 | 0:8e17d3584f99 | 88 | int LSM9DS1::getAcceleroRawX( void ) { |
tona0516 | 0:8e17d3584f99 | 89 | short retval; |
tona0516 | 0:8e17d3584f99 | 90 | char data[2]; |
tona0516 | 0:8e17d3584f99 | 91 | this->read(LSM9DS1_ACCEL_XOUT_L_REG, data, 2); |
tona0516 | 0:8e17d3584f99 | 92 | retval = (data[1]<<8) + data[0]; |
tona0516 | 0:8e17d3584f99 | 93 | return (int)retval; |
tona0516 | 0:8e17d3584f99 | 94 | } |
tona0516 | 0:8e17d3584f99 | 95 | |
tona0516 | 0:8e17d3584f99 | 96 | int LSM9DS1::getAcceleroRawY( void ) { |
tona0516 | 0:8e17d3584f99 | 97 | short retval; |
tona0516 | 0:8e17d3584f99 | 98 | char data[2]; |
tona0516 | 0:8e17d3584f99 | 99 | this->read(LSM9DS1_ACCEL_YOUT_L_REG, data, 2); |
tona0516 | 0:8e17d3584f99 | 100 | retval = (data[1]<<8) + data[0]; |
tona0516 | 0:8e17d3584f99 | 101 | return (int)retval; |
tona0516 | 0:8e17d3584f99 | 102 | } |
tona0516 | 0:8e17d3584f99 | 103 | |
tona0516 | 0:8e17d3584f99 | 104 | int LSM9DS1::getAcceleroRawZ( void ) { |
tona0516 | 0:8e17d3584f99 | 105 | short retval; |
tona0516 | 0:8e17d3584f99 | 106 | char data[2]; |
tona0516 | 0:8e17d3584f99 | 107 | this->read(LSM9DS1_ACCEL_ZOUT_L_REG, data, 2); |
tona0516 | 0:8e17d3584f99 | 108 | retval = (data[1]<<8) + data[0]; |
tona0516 | 0:8e17d3584f99 | 109 | return (int)retval; |
tona0516 | 0:8e17d3584f99 | 110 | } |
tona0516 | 0:8e17d3584f99 | 111 | |
tona0516 | 0:8e17d3584f99 | 112 | void LSM9DS1::getAcceleroRaw( int *data ) { |
tona0516 | 0:8e17d3584f99 | 113 | char temp[6]; |
tona0516 | 0:8e17d3584f99 | 114 | this->read(LSM9DS1_ACCEL_XOUT_L_REG, temp, 6); |
tona0516 | 0:8e17d3584f99 | 115 | data[0] = (int)(short)((temp[1]<<8) + temp[0]); |
tona0516 | 0:8e17d3584f99 | 116 | data[1] = (int)(short)((temp[3]<<8) + temp[2]); |
tona0516 | 0:8e17d3584f99 | 117 | data[2] = (int)(short)((temp[5]<<8) + temp[4]); |
tona0516 | 0:8e17d3584f99 | 118 | } |
tona0516 | 0:8e17d3584f99 | 119 | |
tona0516 | 0:8e17d3584f99 | 120 | |
tona0516 | 0:8e17d3584f99 | 121 | //-------------------------------------------------- |
tona0516 | 0:8e17d3584f99 | 122 | //------------------Gyroscope----------------------- |
tona0516 | 0:8e17d3584f99 | 123 | //-------------------------------------------------- |
tona0516 | 0:8e17d3584f99 | 124 | |
tona0516 | 0:8e17d3584f99 | 125 | void LSM9DS1::setGyroRange( char range ) { |
tona0516 | 0:8e17d3584f99 | 126 | char temp; |
tona0516 | 0:8e17d3584f99 | 127 | currentGyroRange = range; |
tona0516 | 0:8e17d3584f99 | 128 | range = range & 0x03; |
tona0516 | 0:8e17d3584f99 | 129 | temp = this->read(LSM9DS1_CTRL_REG1_G); |
tona0516 | 0:8e17d3584f99 | 130 | temp &= ~(3<<3); |
tona0516 | 0:8e17d3584f99 | 131 | temp = temp + range<<3; |
tona0516 | 0:8e17d3584f99 | 132 | this->write(LSM9DS1_CTRL_REG1_G, temp); |
tona0516 | 0:8e17d3584f99 | 133 | } |
tona0516 | 0:8e17d3584f99 | 134 | |
tona0516 | 0:8e17d3584f99 | 135 | int LSM9DS1::getGyroRawX( void ) { |
tona0516 | 0:8e17d3584f99 | 136 | short retval; |
tona0516 | 0:8e17d3584f99 | 137 | char data[2]; |
tona0516 | 0:8e17d3584f99 | 138 | this->read(LSM9DS1_GYRO_XOUT_L_REG, data, 2); |
tona0516 | 0:8e17d3584f99 | 139 | retval = (data[1]<<8) + data[0]; |
tona0516 | 0:8e17d3584f99 | 140 | return (int)retval; |
tona0516 | 0:8e17d3584f99 | 141 | } |
tona0516 | 0:8e17d3584f99 | 142 | |
tona0516 | 0:8e17d3584f99 | 143 | int LSM9DS1::getGyroRawY( void ) { |
tona0516 | 0:8e17d3584f99 | 144 | short retval; |
tona0516 | 0:8e17d3584f99 | 145 | char data[2]; |
tona0516 | 0:8e17d3584f99 | 146 | this->read(LSM9DS1_GYRO_YOUT_L_REG, data, 2); |
tona0516 | 0:8e17d3584f99 | 147 | retval = (data[1]<<8) + data[0]; |
tona0516 | 0:8e17d3584f99 | 148 | return (int)retval; |
tona0516 | 0:8e17d3584f99 | 149 | } |
tona0516 | 0:8e17d3584f99 | 150 | |
tona0516 | 0:8e17d3584f99 | 151 | int LSM9DS1::getGyroRawZ( void ) { |
tona0516 | 0:8e17d3584f99 | 152 | short retval; |
tona0516 | 0:8e17d3584f99 | 153 | char data[2]; |
tona0516 | 0:8e17d3584f99 | 154 | this->read(LSM9DS1_GYRO_ZOUT_L_REG, data, 2); |
tona0516 | 0:8e17d3584f99 | 155 | retval = (data[1]<<8) + data[0]; |
tona0516 | 0:8e17d3584f99 | 156 | return (int)retval; |
tona0516 | 0:8e17d3584f99 | 157 | } |
tona0516 | 0:8e17d3584f99 | 158 | |
tona0516 | 0:8e17d3584f99 | 159 | void LSM9DS1::getGyroRaw( int *data ) { |
tona0516 | 0:8e17d3584f99 | 160 | char temp[6]; |
tona0516 | 0:8e17d3584f99 | 161 | this->read(LSM9DS1_GYRO_XOUT_L_REG, temp, 6); |
tona0516 | 0:8e17d3584f99 | 162 | data[0] = (int)(short)((temp[1]<<8) + temp[0]); |
tona0516 | 0:8e17d3584f99 | 163 | data[1] = (int)(short)((temp[3]<<8) + temp[2]); |
tona0516 | 0:8e17d3584f99 | 164 | data[2] = (int)(short)((temp[5]<<8) + temp[4]); |
tona0516 | 0:8e17d3584f99 | 165 | } |