danny hack
Lis2dh12.cpp@1:d89f4b12116b, 2018-01-05 (annotated)
- Committer:
- jurica238814
- Date:
- Fri Jan 05 13:32:08 2018 +0000
- Revision:
- 1:d89f4b12116b
- Parent:
- 0:cc5d477d5dbe
- Child:
- 2:1fa08c7a2a3c
Small changes.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jurica238814 | 0:cc5d477d5dbe | 1 | /* |
jurica238814 | 0:cc5d477d5dbe | 2 | * |
jurica238814 | 0:cc5d477d5dbe | 3 | * LIS2DH12 MEMS digital output motion sensor |
jurica238814 | 0:cc5d477d5dbe | 4 | * More info @ aconno.de |
jurica238814 | 0:cc5d477d5dbe | 5 | * Made by Jurica Resetar |
jurica238814 | 0:cc5d477d5dbe | 6 | * jurica_resetar@yahoo.com |
jurica238814 | 0:cc5d477d5dbe | 7 | * |
jurica238814 | 0:cc5d477d5dbe | 8 | */ |
jurica238814 | 0:cc5d477d5dbe | 9 | |
jurica238814 | 0:cc5d477d5dbe | 10 | #include "Lis2dh12.h" |
jurica238814 | 0:cc5d477d5dbe | 11 | #include "Lis2dh12_regs.h" |
jurica238814 | 0:cc5d477d5dbe | 12 | |
jurica238814 | 0:cc5d477d5dbe | 13 | Lis2dh12::Lis2dh12(I2C *i2c_, char address) : i2c(i2c_, address){ |
jurica238814 | 0:cc5d477d5dbe | 14 | } |
jurica238814 | 0:cc5d477d5dbe | 15 | |
jurica238814 | 0:cc5d477d5dbe | 16 | uint8_t Lis2dh12::whoIAm(){ |
jurica238814 | 0:cc5d477d5dbe | 17 | char regAddr = (char)WHO_AM_I; |
jurica238814 | 0:cc5d477d5dbe | 18 | char regData; |
jurica238814 | 0:cc5d477d5dbe | 19 | i2c.readFromReg(regAddr, ®Data, 1); |
jurica238814 | 0:cc5d477d5dbe | 20 | return (uint8_t)regData; |
jurica238814 | 0:cc5d477d5dbe | 21 | } |
jurica238814 | 0:cc5d477d5dbe | 22 | |
jurica238814 | 0:cc5d477d5dbe | 23 | uint8_t Lis2dh12::setMode(Mode mode){ |
jurica238814 | 0:cc5d477d5dbe | 24 | char ctrl1Copy; |
jurica238814 | 0:cc5d477d5dbe | 25 | char ctrl4Copy; |
jurica238814 | 0:cc5d477d5dbe | 26 | uint8_t success; |
jurica238814 | 0:cc5d477d5dbe | 27 | |
jurica238814 | 0:cc5d477d5dbe | 28 | i2c.readFromReg((char)CTRL_REG1, &ctrl1Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 29 | i2c.readFromReg((char)CTRL_REG4, &ctrl4Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 30 | |
jurica238814 | 0:cc5d477d5dbe | 31 | switch(mode){ |
jurica238814 | 0:cc5d477d5dbe | 32 | case HIGH_RES: |
jurica238814 | 0:cc5d477d5dbe | 33 | ctrl1Copy &= 0xF7; |
jurica238814 | 0:cc5d477d5dbe | 34 | ctrl4Copy |= 0x08; |
jurica238814 | 0:cc5d477d5dbe | 35 | break; |
jurica238814 | 0:cc5d477d5dbe | 36 | case NORMAL: |
jurica238814 | 0:cc5d477d5dbe | 37 | ctrl1Copy &= 0xF7; |
jurica238814 | 0:cc5d477d5dbe | 38 | ctrl4Copy &= 0xF7; |
jurica238814 | 0:cc5d477d5dbe | 39 | break; |
jurica238814 | 0:cc5d477d5dbe | 40 | case LOW_POWER: |
jurica238814 | 0:cc5d477d5dbe | 41 | ctrl1Copy |= 0x08; |
jurica238814 | 0:cc5d477d5dbe | 42 | ctrl4Copy &= 0xF7; |
jurica238814 | 0:cc5d477d5dbe | 43 | break; |
jurica238814 | 0:cc5d477d5dbe | 44 | default: |
jurica238814 | 0:cc5d477d5dbe | 45 | return 0; |
jurica238814 | 0:cc5d477d5dbe | 46 | } |
jurica238814 | 0:cc5d477d5dbe | 47 | i2c.writeToReg((char)CTRL_REG1, &ctrl1Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 48 | success = i2c.writeToReg((char)CTRL_REG4, &ctrl4Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 49 | return success; |
jurica238814 | 0:cc5d477d5dbe | 50 | } |
jurica238814 | 0:cc5d477d5dbe | 51 | |
jurica238814 | 0:cc5d477d5dbe | 52 | uint8_t Lis2dh12::enableAxes(Axis axis){ |
jurica238814 | 0:cc5d477d5dbe | 53 | char ctrl1Copy; |
jurica238814 | 0:cc5d477d5dbe | 54 | i2c.readFromReg((char)CTRL_REG1, &ctrl1Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 55 | ctrl1Copy |= axis; |
jurica238814 | 0:cc5d477d5dbe | 56 | i2c.writeToReg((char)CTRL_REG1, &ctrl1Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 57 | return 0; |
jurica238814 | 0:cc5d477d5dbe | 58 | } |
jurica238814 | 0:cc5d477d5dbe | 59 | |
jurica238814 | 0:cc5d477d5dbe | 60 | uint8_t Lis2dh12::disableAxes(Axis axis){ |
jurica238814 | 0:cc5d477d5dbe | 61 | char ctrl1Copy; |
jurica238814 | 0:cc5d477d5dbe | 62 | i2c.readFromReg((char)CTRL_REG1, &ctrl1Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 63 | ctrl1Copy &= ~(1 << axis); |
jurica238814 | 0:cc5d477d5dbe | 64 | i2c.writeToReg((char)CTRL_REG1, &ctrl1Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 65 | return 0; |
jurica238814 | 0:cc5d477d5dbe | 66 | } |
jurica238814 | 0:cc5d477d5dbe | 67 | |
jurica238814 | 0:cc5d477d5dbe | 68 | int16_t Lis2dh12::readXAxis(){ |
jurica238814 | 0:cc5d477d5dbe | 69 | int16_t rawData; |
jurica238814 | 0:cc5d477d5dbe | 70 | char tempData; |
jurica238814 | 1:d89f4b12116b | 71 | // Make sure new data is ready |
jurica238814 | 1:d89f4b12116b | 72 | do{ |
jurica238814 | 1:d89f4b12116b | 73 | i2c.readFromReg((char)STATUS, &tempData, 1); |
jurica238814 | 1:d89f4b12116b | 74 | }while(!(tempData & 0x08)); |
jurica238814 | 1:d89f4b12116b | 75 | do{ |
jurica238814 | 1:d89f4b12116b | 76 | i2c.readFromReg((char)STATUS, &tempData, 1); |
jurica238814 | 1:d89f4b12116b | 77 | }while(!(tempData & 0x80)); |
jurica238814 | 1:d89f4b12116b | 78 | // Same data have been overwritten |
jurica238814 | 1:d89f4b12116b | 79 | |
jurica238814 | 0:cc5d477d5dbe | 80 | i2c.readFromReg((char)OUT_X_H, &tempData, 1); |
jurica238814 | 0:cc5d477d5dbe | 81 | rawData = (int8_t)tempData << 8; |
jurica238814 | 0:cc5d477d5dbe | 82 | i2c.readFromReg((char)OUT_X_L, &tempData, 1); |
jurica238814 | 0:cc5d477d5dbe | 83 | rawData |= (int8_t)tempData; |
jurica238814 | 0:cc5d477d5dbe | 84 | return rawData; |
jurica238814 | 0:cc5d477d5dbe | 85 | } |
jurica238814 | 0:cc5d477d5dbe | 86 | |
jurica238814 | 0:cc5d477d5dbe | 87 | int16_t Lis2dh12::readYAxis(){ |
jurica238814 | 0:cc5d477d5dbe | 88 | int16_t rawData; |
jurica238814 | 0:cc5d477d5dbe | 89 | char tempData; |
jurica238814 | 0:cc5d477d5dbe | 90 | i2c.readFromReg((char)OUT_Y_H, &tempData, 1); |
jurica238814 | 0:cc5d477d5dbe | 91 | rawData = (int8_t)tempData << 8; |
jurica238814 | 0:cc5d477d5dbe | 92 | i2c.readFromReg((char)OUT_Y_L, &tempData, 1); |
jurica238814 | 0:cc5d477d5dbe | 93 | rawData |= (int8_t)tempData; |
jurica238814 | 0:cc5d477d5dbe | 94 | return rawData; |
jurica238814 | 0:cc5d477d5dbe | 95 | } |
jurica238814 | 0:cc5d477d5dbe | 96 | |
jurica238814 | 0:cc5d477d5dbe | 97 | int16_t Lis2dh12::readZAxis(){ |
jurica238814 | 0:cc5d477d5dbe | 98 | int16_t rawData; |
jurica238814 | 0:cc5d477d5dbe | 99 | char tempData; |
jurica238814 | 0:cc5d477d5dbe | 100 | i2c.readFromReg((char)OUT_Z_H, &tempData, 1); |
jurica238814 | 0:cc5d477d5dbe | 101 | rawData = (int8_t)tempData << 8; |
jurica238814 | 0:cc5d477d5dbe | 102 | i2c.readFromReg((char)OUT_Z_L, &tempData, 1); |
jurica238814 | 0:cc5d477d5dbe | 103 | rawData |= (int8_t)tempData; |
jurica238814 | 0:cc5d477d5dbe | 104 | return rawData; |
jurica238814 | 0:cc5d477d5dbe | 105 | } |
jurica238814 | 0:cc5d477d5dbe | 106 | |
jurica238814 | 0:cc5d477d5dbe | 107 | uint8_t Lis2dh12::setODR(Odr odr){ |
jurica238814 | 0:cc5d477d5dbe | 108 | char ctrl1Copy; |
jurica238814 | 0:cc5d477d5dbe | 109 | i2c.readFromReg((char)CTRL_REG1, &ctrl1Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 110 | ctrl1Copy |= (odr << 4); |
jurica238814 | 0:cc5d477d5dbe | 111 | i2c.writeToReg((char)CTRL_REG1, &ctrl1Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 112 | return 0; |
jurica238814 | 0:cc5d477d5dbe | 113 | } |
jurica238814 | 0:cc5d477d5dbe | 114 | |
jurica238814 | 0:cc5d477d5dbe | 115 | uint8_t Lis2dh12::setScale(Scale scale){ |
jurica238814 | 0:cc5d477d5dbe | 116 | char ctrl4Copy; |
jurica238814 | 0:cc5d477d5dbe | 117 | i2c.readFromReg((char)CTRL_REG4, &ctrl4Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 118 | ctrl4Copy |= (scale << 4); |
jurica238814 | 0:cc5d477d5dbe | 119 | i2c.writeToReg((char)CTRL_REG4, &ctrl4Copy, 1); |
jurica238814 | 0:cc5d477d5dbe | 120 | return 0; |
jurica238814 | 0:cc5d477d5dbe | 121 | } |
jurica238814 | 0:cc5d477d5dbe | 122 | |
jurica238814 | 0:cc5d477d5dbe | 123 | |
jurica238814 | 0:cc5d477d5dbe | 124 |