Dummy commit.
Dependents: iBeacon acnsensa acnSENSA
Fork of ACD52832_LSM9DS1 by
LSM9DS1.cpp
- Committer:
- Dautor
- Date:
- 2018-03-02
- Revision:
- 5:d6a0d907988f
- Parent:
- 4:a1a57aaacc4c
File content as of revision 5:d6a0d907988f:
#include "mbed.h"
#include "LSM9DS1.h"
#include "LSM9DS1_RegVals.h"
#include "acd52832_bsp.h"
LSM9DS1::LSM9DS1(I2C *i2c){
_i2c = i2c;
}
void LSM9DS1::startMagnetometer(){
char data[2];
data[0] = (char)CTRL_REG1_M; // Target register
data[1] = (char)0x7C; // Data to write
_i2c->write(TWI_MAG_ADDR, data, 0x02,0);
data[0] = (char)CTRL_REG2_M; // Target register
data[1] = (char)0x00; // Full scale for the sensor (+-4g)
_i2c->write(TWI_MAG_ADDR, data, 0x02,0);
data[0] = (char)CTRL_REG3_M; // Target register
data[1] = (char)0x00; // Data to write
_i2c->write(TWI_MAG_ADDR, data, 0x02,0);
data[0] = (char)CTRL_REG4_M; // Target register
data[1] = (char)(3<<3); // Data to write
_i2c->write(TWI_MAG_ADDR, data, 0x02,0);
data[0] = (char)CTRL_REG5_M; // Target register
data[1] = (char)0x00; // Data to write
_i2c->write(TWI_MAG_ADDR, data, 0x02,0);
}
void LSM9DS1::readMagnetometer(int16_t *results){
char results_[6];
int16_t resultFinal[3];
char out_x_l_m = OUT_X_L_M;
_i2c->write(TWI_MAG_ADDR, &out_x_l_m, 1, true);
_i2c->read(TWI_MAG_ADDR, results_, 6, 0);
resultFinal[0] = ((results_[1]<<8) | results_[0]);
resultFinal[1] = ((results_[3]<<8) | results_[2]);
resultFinal[2] = ((results_[5]<<8) | results_[4]);
*(results) = resultFinal[0];
*(results + 1) = resultFinal[1];
*(results + 2) = resultFinal[2];
}
void LSM9DS1::startAccelerometer(){
char data[2];
data[0] = (char)CTRL_REG5_XL; // Target register
data[1] = (char)0x38; // Data to write
_i2c->write(TWI_AG_ADDR, data, 0x02,0);
data[0] = (char)CTRL_REG6_XL; // Target register
data[1] = (char)0xC7; // +-2g -> See reference manual for more info (page 52)
_i2c->write(TWI_AG_ADDR, data, 0x02,0);
}
void LSM9DS1::readAccelerometer(int16_t *results){
char results_[6];
int16_t resultFinal[3];
char out_x_l_xl = OUT_X_L_XL;
_i2c->write(TWI_AG_ADDR, &out_x_l_xl, 1, true);
_i2c->read(TWI_AG_ADDR, results_, 6, 0);
resultFinal[0] = ((results_[1]<<8) | results_[0]);
resultFinal[1] = ((results_[3]<<8) | results_[2]);
resultFinal[2] = ((results_[5]<<8) | results_[4]);
*(results) = resultFinal[0];
*(results + 1) = resultFinal[1];
*(results + 2) = resultFinal[2];
}
void LSM9DS1::startGyroscope(){
char data[2];
data[0] = (char)CTRL_REG6_XL; // Target register
data[1] = (char)0xC7 & (char)0x1F; // Data to write
_i2c->write(TWI_AG_ADDR, data, 0x02,0);
data[0] = (char)CTRL_REG1_G; // Target register
data[1] = (char)0xC0; // 245 DPS scale
_i2c->write(TWI_AG_ADDR, data, 0x02,0);
data[0] = (char)CTRL_REG2_G; // Target register
data[1] = (char)0x00; // Data to write
_i2c->write(TWI_AG_ADDR, data, 0x02,0);
data[0] = (char)CTRL_REG3_G; // Target register
data[1] = (char)0x00; // Data to write
_i2c->write(TWI_AG_ADDR, data, 0x02,0);
data[0] = (char)CTRL_REG4; // Target register
data[1] = (char)0x3A; // Data to write
_i2c->write(TWI_AG_ADDR, data, 0x02,0);
data[0] = (char)ORIENT_CFG_G; // Target register
data[1] = (char)0x00; // Data to write
_i2c->write(TWI_AG_ADDR, data, 0x02,0);
}
void LSM9DS1::readGyroscope(int16_t *results){
char results_[6];
int16_t resultFinal[3];
char out_x_l_g = OUT_X_L_G;
_i2c->write(TWI_AG_ADDR, &out_x_l_g, 1, true);
_i2c->read(TWI_AG_ADDR, results_, 6, 0);
resultFinal[0] = ((results_[1]<<8) | results_[0]);
resultFinal[1] = ((results_[3]<<8) | results_[2]);
resultFinal[2] = ((results_[5]<<8) | results_[4]);
*(results) = resultFinal[0];
*(results + 1) = resultFinal[1];
*(results + 2) = resultFinal[2];
}
