Mems sensor

Committer:
Anunnaki
Date:
Thu Sep 22 14:13:04 2016 +0000
Revision:
0:da46ed0f1363
Child:
1:45447b012eea
Juricas initial functions, havent been tested in a separate file

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anunnaki 0:da46ed0f1363 1 #include "mbed.h"
Anunnaki 0:da46ed0f1363 2 #include "LSM9DS1.h"
Anunnaki 0:da46ed0f1363 3 #include "LSM9DS1_RegVals.h"
Anunnaki 0:da46ed0f1363 4
Anunnaki 0:da46ed0f1363 5 LSM9DS1::LSM9DS1(I2C i2c) : _i2c(i2c){
Anunnaki 0:da46ed0f1363 6 startAcc();
Anunnaki 0:da46ed0f1363 7 startGyro();
Anunnaki 0:da46ed0f1363 8 startMag();
Anunnaki 0:da46ed0f1363 9 }
Anunnaki 0:da46ed0f1363 10
Anunnaki 0:da46ed0f1363 11 void LSM9DS1::startMag(){
Anunnaki 0:da46ed0f1363 12 char data[2];
Anunnaki 0:da46ed0f1363 13
Anunnaki 0:da46ed0f1363 14 data[0] = (char)CTRL_REG1_M; // Target register
Anunnaki 0:da46ed0f1363 15 data[1] = (char)0x7C; // Data to write
Anunnaki 0:da46ed0f1363 16 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 17
Anunnaki 0:da46ed0f1363 18 data[0] = (char)CTRL_REG2_M; // Target register
Anunnaki 0:da46ed0f1363 19 data[1] = (char)0x60; // Data to write
Anunnaki 0:da46ed0f1363 20 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 21
Anunnaki 0:da46ed0f1363 22 data[0] = (char)CTRL_REG3_M; // Target register
Anunnaki 0:da46ed0f1363 23 data[1] = (char)0x00; // Data to write
Anunnaki 0:da46ed0f1363 24 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 25
Anunnaki 0:da46ed0f1363 26 data[0] = (char)CTRL_REG4_M; // Target register
Anunnaki 0:da46ed0f1363 27 data[1] = (char)0x0C; // Data to write
Anunnaki 0:da46ed0f1363 28 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 29
Anunnaki 0:da46ed0f1363 30 data[0] = (char)CTRL_REG5_M; // Target register
Anunnaki 0:da46ed0f1363 31 data[1] = (char)0x00; // Data to write
Anunnaki 0:da46ed0f1363 32 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 33
Anunnaki 0:da46ed0f1363 34 }
Anunnaki 0:da46ed0f1363 35
Anunnaki 0:da46ed0f1363 36 void LSM9DS1::readMag(float *results){
Anunnaki 0:da46ed0f1363 37 char results_[6];
Anunnaki 0:da46ed0f1363 38 float res_final[3];
Anunnaki 0:da46ed0f1363 39 char out_x_l_m = OUT_X_L_M;
Anunnaki 0:da46ed0f1363 40
Anunnaki 0:da46ed0f1363 41 _i2c.write(TWI_MAG_ADDR, &out_x_l_m, 1, true);
Anunnaki 0:da46ed0f1363 42 _i2c.read(TWI_MAG_ADDR, results_, 6, 0);
Anunnaki 0:da46ed0f1363 43 res_final[0] = ((results_[1]<<8) | results_[0]);
Anunnaki 0:da46ed0f1363 44 res_final[1] = ((results_[3]<<8) | results_[2]);
Anunnaki 0:da46ed0f1363 45 res_final[2] = ((results_[5]<<8) | results_[4]);
Anunnaki 0:da46ed0f1363 46
Anunnaki 0:da46ed0f1363 47 *(results) = res_final[0];
Anunnaki 0:da46ed0f1363 48 *(results + 1) = res_final[1];
Anunnaki 0:da46ed0f1363 49 *(results + 2) = res_final[2];
Anunnaki 0:da46ed0f1363 50 }
Anunnaki 0:da46ed0f1363 51
Anunnaki 0:da46ed0f1363 52 void LSM9DS1::startAcc(){
Anunnaki 0:da46ed0f1363 53 char data[2];
Anunnaki 0:da46ed0f1363 54
Anunnaki 0:da46ed0f1363 55 data[0] = (char)CTRL_REG5_XL; // Target register
Anunnaki 0:da46ed0f1363 56 data[1] = (char)0x38; // Data to write
Anunnaki 0:da46ed0f1363 57 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 58
Anunnaki 0:da46ed0f1363 59
Anunnaki 0:da46ed0f1363 60 data[0] = (char)CTRL_REG6_XL; // Target register
Anunnaki 0:da46ed0f1363 61 data[1] = (char)0xC7; // Data to write
Anunnaki 0:da46ed0f1363 62 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 63
Anunnaki 0:da46ed0f1363 64
Anunnaki 0:da46ed0f1363 65 }
Anunnaki 0:da46ed0f1363 66
Anunnaki 0:da46ed0f1363 67 void LSM9DS1::readAcc(float *results){
Anunnaki 0:da46ed0f1363 68 char results_[6];
Anunnaki 0:da46ed0f1363 69 float res_final[3];
Anunnaki 0:da46ed0f1363 70 char out_x_l_xl = OUT_X_L_XL;
Anunnaki 0:da46ed0f1363 71
Anunnaki 0:da46ed0f1363 72 _i2c.write(TWI_MAG_ADDR, &out_x_l_xl, 1, true);
Anunnaki 0:da46ed0f1363 73 _i2c.read(TWI_MAG_ADDR, results_, 6, 0);
Anunnaki 0:da46ed0f1363 74 res_final[0] = ((results_[1]<<8) | results_[0]);
Anunnaki 0:da46ed0f1363 75 res_final[1] = ((results_[3]<<8) | results_[2]);
Anunnaki 0:da46ed0f1363 76 res_final[2] = ((results_[5]<<8) | results_[4]);
Anunnaki 0:da46ed0f1363 77
Anunnaki 0:da46ed0f1363 78 *(results) = res_final[0];
Anunnaki 0:da46ed0f1363 79 *(results + 1) = res_final[1];
Anunnaki 0:da46ed0f1363 80 *(results + 2) = res_final[2];
Anunnaki 0:da46ed0f1363 81 }
Anunnaki 0:da46ed0f1363 82
Anunnaki 0:da46ed0f1363 83 void LSM9DS1::startGyro(){
Anunnaki 0:da46ed0f1363 84 char data[2];
Anunnaki 0:da46ed0f1363 85
Anunnaki 0:da46ed0f1363 86 // If GYRO is defines (gyro enabled)
Anunnaki 0:da46ed0f1363 87 #ifdef GYRO
Anunnaki 0:da46ed0f1363 88 data[0] = (char)CTRL_REG6_XL; // Target register
Anunnaki 0:da46ed0f1363 89 data[1] = (char)0xC7 & (char)0x1F; // Data to write
Anunnaki 0:da46ed0f1363 90 = _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 91
Anunnaki 0:da46ed0f1363 92 #endif
Anunnaki 0:da46ed0f1363 93
Anunnaki 0:da46ed0f1363 94 data[0] = (char)CTRL_REG1_G; // Target register
Anunnaki 0:da46ed0f1363 95 data[1] = (char)0xC0; // Data to write
Anunnaki 0:da46ed0f1363 96 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 97
Anunnaki 0:da46ed0f1363 98
Anunnaki 0:da46ed0f1363 99 data[0] = (char)CTRL_REG2_G; // Target register
Anunnaki 0:da46ed0f1363 100 data[1] = (char)0x00; // Data to write
Anunnaki 0:da46ed0f1363 101 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 102
Anunnaki 0:da46ed0f1363 103
Anunnaki 0:da46ed0f1363 104 data[0] = (char)CTRL_REG3_G; // Target register
Anunnaki 0:da46ed0f1363 105 data[1] = (char)0x00; // Data to write
Anunnaki 0:da46ed0f1363 106 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 107
Anunnaki 0:da46ed0f1363 108
Anunnaki 0:da46ed0f1363 109 data[0] = (char)CTRL_REG4; // Target register
Anunnaki 0:da46ed0f1363 110 data[1] = (char)0x3A; // Data to write
Anunnaki 0:da46ed0f1363 111 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 112
Anunnaki 0:da46ed0f1363 113
Anunnaki 0:da46ed0f1363 114 data[0] = (char)ORIENT_CFG_G; // Target register
Anunnaki 0:da46ed0f1363 115 data[1] = (char)0x00; // Data to write
Anunnaki 0:da46ed0f1363 116 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 117
Anunnaki 0:da46ed0f1363 118 }
Anunnaki 0:da46ed0f1363 119
Anunnaki 0:da46ed0f1363 120 void LSM9DS1::readGyro(float *results){
Anunnaki 0:da46ed0f1363 121 char results_[6];
Anunnaki 0:da46ed0f1363 122 float res_final[3];
Anunnaki 0:da46ed0f1363 123 char out_x_l_g = OUT_X_L_G;
Anunnaki 0:da46ed0f1363 124
Anunnaki 0:da46ed0f1363 125 _i2c.write(TWI_MAG_ADDR, &out_x_l_g, 1, true);
Anunnaki 0:da46ed0f1363 126 _i2c.read(TWI_MAG_ADDR, results_, 6, 0);
Anunnaki 0:da46ed0f1363 127 res_final[0] = ((results_[1]<<8) | results_[0]);
Anunnaki 0:da46ed0f1363 128 res_final[1] = ((results_[3]<<8) | results_[2]);
Anunnaki 0:da46ed0f1363 129 res_final[2] = ((results_[5]<<8) | results_[4]);
Anunnaki 0:da46ed0f1363 130
Anunnaki 0:da46ed0f1363 131 *(results) = res_final[0];
Anunnaki 0:da46ed0f1363 132 *(results + 1) = res_final[1];
Anunnaki 0:da46ed0f1363 133 *(results + 2) = res_final[2];
Anunnaki 0:da46ed0f1363 134 }