Mems sensor
LSM9DS1.cpp@0:da46ed0f1363, 2016-09-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |