LSM9DS1

Dependents:   Zumipen MIX_DEVICE

Committer:
tona0516
Date:
Mon Feb 20 07:11:57 2017 +0000
Revision:
0:8e17d3584f99
Zumipen???????

Who changed what in which revision?

UserRevisionLine numberNew 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 }