Mems sensor
LSM9DS1.cpp@1:45447b012eea, 2016-09-23 (annotated)
- Committer:
- Anunnaki
- Date:
- Fri Sep 23 12:15:01 2016 +0000
- Revision:
- 1:45447b012eea
- Parent:
- 0:da46ed0f1363
Changed faulty addresses
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 | 1:45447b012eea | 4 | #include "acd52832_bsp.h" |
Anunnaki | 0:da46ed0f1363 | 5 | |
Anunnaki | 0:da46ed0f1363 | 6 | LSM9DS1::LSM9DS1(I2C i2c) : _i2c(i2c){ |
Anunnaki | 0:da46ed0f1363 | 7 | startAcc(); |
Anunnaki | 0:da46ed0f1363 | 8 | startGyro(); |
Anunnaki | 0:da46ed0f1363 | 9 | startMag(); |
Anunnaki | 0:da46ed0f1363 | 10 | } |
Anunnaki | 0:da46ed0f1363 | 11 | |
Anunnaki | 0:da46ed0f1363 | 12 | void LSM9DS1::startMag(){ |
Anunnaki | 0:da46ed0f1363 | 13 | char data[2]; |
Anunnaki | 0:da46ed0f1363 | 14 | |
Anunnaki | 0:da46ed0f1363 | 15 | data[0] = (char)CTRL_REG1_M; // Target register |
Anunnaki | 0:da46ed0f1363 | 16 | data[1] = (char)0x7C; // Data to write |
Anunnaki | 0:da46ed0f1363 | 17 | _i2c.write(TWI_MAG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 18 | |
Anunnaki | 0:da46ed0f1363 | 19 | data[0] = (char)CTRL_REG2_M; // Target register |
Anunnaki | 1:45447b012eea | 20 | data[1] = (char)0x00; // Data to write |
Anunnaki | 0:da46ed0f1363 | 21 | _i2c.write(TWI_MAG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 22 | |
Anunnaki | 0:da46ed0f1363 | 23 | data[0] = (char)CTRL_REG3_M; // Target register |
Anunnaki | 0:da46ed0f1363 | 24 | data[1] = (char)0x00; // Data to write |
Anunnaki | 0:da46ed0f1363 | 25 | _i2c.write(TWI_MAG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 26 | |
Anunnaki | 0:da46ed0f1363 | 27 | data[0] = (char)CTRL_REG4_M; // Target register |
Anunnaki | 1:45447b012eea | 28 | data[1] = (char)(3<<3); // Data to write |
Anunnaki | 0:da46ed0f1363 | 29 | _i2c.write(TWI_MAG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 30 | |
Anunnaki | 0:da46ed0f1363 | 31 | data[0] = (char)CTRL_REG5_M; // Target register |
Anunnaki | 0:da46ed0f1363 | 32 | data[1] = (char)0x00; // Data to write |
Anunnaki | 0:da46ed0f1363 | 33 | _i2c.write(TWI_MAG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 34 | } |
Anunnaki | 0:da46ed0f1363 | 35 | |
Anunnaki | 1:45447b012eea | 36 | void LSM9DS1::readMag(int16_t *results){ |
Anunnaki | 0:da46ed0f1363 | 37 | char results_[6]; |
Anunnaki | 1:45447b012eea | 38 | int16_t 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 | 1:45447b012eea | 57 | _i2c.write(TWI_AG_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 | 1:45447b012eea | 62 | _i2c.write(TWI_AG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 63 | } |
Anunnaki | 0:da46ed0f1363 | 64 | |
Anunnaki | 1:45447b012eea | 65 | void LSM9DS1::readAcc(int16_t *results){ |
Anunnaki | 0:da46ed0f1363 | 66 | char results_[6]; |
Anunnaki | 1:45447b012eea | 67 | int16_t res_final[3]; |
Anunnaki | 0:da46ed0f1363 | 68 | char out_x_l_xl = OUT_X_L_XL; |
Anunnaki | 0:da46ed0f1363 | 69 | |
Anunnaki | 1:45447b012eea | 70 | _i2c.write(TWI_AG_ADDR, &out_x_l_xl, 1, true); |
Anunnaki | 1:45447b012eea | 71 | _i2c.read(TWI_AG_ADDR, results_, 6, 0); |
Anunnaki | 0:da46ed0f1363 | 72 | res_final[0] = ((results_[1]<<8) | results_[0]); |
Anunnaki | 0:da46ed0f1363 | 73 | res_final[1] = ((results_[3]<<8) | results_[2]); |
Anunnaki | 0:da46ed0f1363 | 74 | res_final[2] = ((results_[5]<<8) | results_[4]); |
Anunnaki | 0:da46ed0f1363 | 75 | |
Anunnaki | 0:da46ed0f1363 | 76 | *(results) = res_final[0]; |
Anunnaki | 0:da46ed0f1363 | 77 | *(results + 1) = res_final[1]; |
Anunnaki | 0:da46ed0f1363 | 78 | *(results + 2) = res_final[2]; |
Anunnaki | 0:da46ed0f1363 | 79 | } |
Anunnaki | 0:da46ed0f1363 | 80 | |
Anunnaki | 0:da46ed0f1363 | 81 | void LSM9DS1::startGyro(){ |
Anunnaki | 0:da46ed0f1363 | 82 | char data[2]; |
Anunnaki | 0:da46ed0f1363 | 83 | |
Anunnaki | 1:45447b012eea | 84 | data[0] = (char)CTRL_REG6_XL; // Target register |
Anunnaki | 1:45447b012eea | 85 | data[1] = (char)0xC7 & (char)0x1F; // Data to write |
Anunnaki | 1:45447b012eea | 86 | _i2c.write(TWI_AG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 87 | |
Anunnaki | 0:da46ed0f1363 | 88 | data[0] = (char)CTRL_REG1_G; // Target register |
Anunnaki | 0:da46ed0f1363 | 89 | data[1] = (char)0xC0; // Data to write |
Anunnaki | 1:45447b012eea | 90 | _i2c.write(TWI_AG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 91 | |
Anunnaki | 0:da46ed0f1363 | 92 | |
Anunnaki | 0:da46ed0f1363 | 93 | data[0] = (char)CTRL_REG2_G; // Target register |
Anunnaki | 0:da46ed0f1363 | 94 | data[1] = (char)0x00; // Data to write |
Anunnaki | 1:45447b012eea | 95 | _i2c.write(TWI_AG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 96 | |
Anunnaki | 0:da46ed0f1363 | 97 | |
Anunnaki | 0:da46ed0f1363 | 98 | data[0] = (char)CTRL_REG3_G; // Target register |
Anunnaki | 0:da46ed0f1363 | 99 | data[1] = (char)0x00; // Data to write |
Anunnaki | 1:45447b012eea | 100 | _i2c.write(TWI_AG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 101 | |
Anunnaki | 0:da46ed0f1363 | 102 | |
Anunnaki | 0:da46ed0f1363 | 103 | data[0] = (char)CTRL_REG4; // Target register |
Anunnaki | 0:da46ed0f1363 | 104 | data[1] = (char)0x3A; // Data to write |
Anunnaki | 1:45447b012eea | 105 | _i2c.write(TWI_AG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 106 | |
Anunnaki | 0:da46ed0f1363 | 107 | |
Anunnaki | 0:da46ed0f1363 | 108 | data[0] = (char)ORIENT_CFG_G; // Target register |
Anunnaki | 0:da46ed0f1363 | 109 | data[1] = (char)0x00; // Data to write |
Anunnaki | 1:45447b012eea | 110 | _i2c.write(TWI_AG_ADDR, data, 0x02,0); |
Anunnaki | 0:da46ed0f1363 | 111 | |
Anunnaki | 0:da46ed0f1363 | 112 | } |
Anunnaki | 0:da46ed0f1363 | 113 | |
Anunnaki | 1:45447b012eea | 114 | void LSM9DS1::readGyro(int16_t *results){ |
Anunnaki | 0:da46ed0f1363 | 115 | char results_[6]; |
Anunnaki | 1:45447b012eea | 116 | int16_t res_final[3]; |
Anunnaki | 0:da46ed0f1363 | 117 | char out_x_l_g = OUT_X_L_G; |
Anunnaki | 0:da46ed0f1363 | 118 | |
Anunnaki | 1:45447b012eea | 119 | _i2c.write(TWI_AG_ADDR, &out_x_l_g, 1, true); |
Anunnaki | 1:45447b012eea | 120 | _i2c.read(TWI_AG_ADDR, results_, 6, 0); |
Anunnaki | 0:da46ed0f1363 | 121 | res_final[0] = ((results_[1]<<8) | results_[0]); |
Anunnaki | 0:da46ed0f1363 | 122 | res_final[1] = ((results_[3]<<8) | results_[2]); |
Anunnaki | 0:da46ed0f1363 | 123 | res_final[2] = ((results_[5]<<8) | results_[4]); |
Anunnaki | 0:da46ed0f1363 | 124 | |
Anunnaki | 0:da46ed0f1363 | 125 | *(results) = res_final[0]; |
Anunnaki | 0:da46ed0f1363 | 126 | *(results + 1) = res_final[1]; |
Anunnaki | 0:da46ed0f1363 | 127 | *(results + 2) = res_final[2]; |
Anunnaki | 0:da46ed0f1363 | 128 | } |