Library for LIS2DH12 acc.
Dependents: acnSensa_LIS aconnoCellularGnss Lizzy
Lis2dh12.cpp
- Committer:
- jurica238814
- Date:
- 2018-01-05
- Revision:
- 1:d89f4b12116b
- Parent:
- 0:cc5d477d5dbe
- Child:
- 2:1fa08c7a2a3c
File content as of revision 1:d89f4b12116b:
/* * * LIS2DH12 MEMS digital output motion sensor * More info @ aconno.de * Made by Jurica Resetar * jurica_resetar@yahoo.com * */ #include "Lis2dh12.h" #include "Lis2dh12_regs.h" Lis2dh12::Lis2dh12(I2C *i2c_, char address) : i2c(i2c_, address){ } uint8_t Lis2dh12::whoIAm(){ char regAddr = (char)WHO_AM_I; char regData; i2c.readFromReg(regAddr, ®Data, 1); return (uint8_t)regData; } uint8_t Lis2dh12::setMode(Mode mode){ char ctrl1Copy; char ctrl4Copy; uint8_t success; i2c.readFromReg((char)CTRL_REG1, &ctrl1Copy, 1); i2c.readFromReg((char)CTRL_REG4, &ctrl4Copy, 1); switch(mode){ case HIGH_RES: ctrl1Copy &= 0xF7; ctrl4Copy |= 0x08; break; case NORMAL: ctrl1Copy &= 0xF7; ctrl4Copy &= 0xF7; break; case LOW_POWER: ctrl1Copy |= 0x08; ctrl4Copy &= 0xF7; break; default: return 0; } i2c.writeToReg((char)CTRL_REG1, &ctrl1Copy, 1); success = i2c.writeToReg((char)CTRL_REG4, &ctrl4Copy, 1); return success; } uint8_t Lis2dh12::enableAxes(Axis axis){ char ctrl1Copy; i2c.readFromReg((char)CTRL_REG1, &ctrl1Copy, 1); ctrl1Copy |= axis; i2c.writeToReg((char)CTRL_REG1, &ctrl1Copy, 1); return 0; } uint8_t Lis2dh12::disableAxes(Axis axis){ char ctrl1Copy; i2c.readFromReg((char)CTRL_REG1, &ctrl1Copy, 1); ctrl1Copy &= ~(1 << axis); i2c.writeToReg((char)CTRL_REG1, &ctrl1Copy, 1); return 0; } int16_t Lis2dh12::readXAxis(){ int16_t rawData; char tempData; // Make sure new data is ready do{ i2c.readFromReg((char)STATUS, &tempData, 1); }while(!(tempData & 0x08)); do{ i2c.readFromReg((char)STATUS, &tempData, 1); }while(!(tempData & 0x80)); // Same data have been overwritten i2c.readFromReg((char)OUT_X_H, &tempData, 1); rawData = (int8_t)tempData << 8; i2c.readFromReg((char)OUT_X_L, &tempData, 1); rawData |= (int8_t)tempData; return rawData; } int16_t Lis2dh12::readYAxis(){ int16_t rawData; char tempData; i2c.readFromReg((char)OUT_Y_H, &tempData, 1); rawData = (int8_t)tempData << 8; i2c.readFromReg((char)OUT_Y_L, &tempData, 1); rawData |= (int8_t)tempData; return rawData; } int16_t Lis2dh12::readZAxis(){ int16_t rawData; char tempData; i2c.readFromReg((char)OUT_Z_H, &tempData, 1); rawData = (int8_t)tempData << 8; i2c.readFromReg((char)OUT_Z_L, &tempData, 1); rawData |= (int8_t)tempData; return rawData; } uint8_t Lis2dh12::setODR(Odr odr){ char ctrl1Copy; i2c.readFromReg((char)CTRL_REG1, &ctrl1Copy, 1); ctrl1Copy |= (odr << 4); i2c.writeToReg((char)CTRL_REG1, &ctrl1Copy, 1); return 0; } uint8_t Lis2dh12::setScale(Scale scale){ char ctrl4Copy; i2c.readFromReg((char)CTRL_REG4, &ctrl4Copy, 1); ctrl4Copy |= (scale << 4); i2c.writeToReg((char)CTRL_REG4, &ctrl4Copy, 1); return 0; }