cvbxcvxcv
Lis2dh12.cpp@3:07ddb07f8b7f, 2018-01-12 (annotated)
- Committer:
- jurica238814
- Date:
- Fri Jan 12 16:10:28 2018 +0000
- Revision:
- 3:07ddb07f8b7f
- Parent:
- 2:1fa08c7a2a3c
- Child:
- 4:043396f22548
Last commit msg is wrong :D ; Valid one: Methods added.
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 | 2:1fa08c7a2a3c | 123 | /* Interrupt activity 1 driven to INT1 pad */ |
jurica238814 | 2:1fa08c7a2a3c | 124 | // TODO: Napraviti tako da postoji samo jedna metoda int1Setup koja prima gro |
jurica238814 | 2:1fa08c7a2a3c | 125 | // parametara: THS, DUR, Latch... |
jurica238814 | 2:1fa08c7a2a3c | 126 | uint8_t Lis2dh12::int1Setup(uint8_t setup){ |
jurica238814 | 2:1fa08c7a2a3c | 127 | char data = setup; |
jurica238814 | 2:1fa08c7a2a3c | 128 | i2c.writeToReg((char)CTRL_REG3, &data, 1); |
jurica238814 | 2:1fa08c7a2a3c | 129 | return 0; |
jurica238814 | 2:1fa08c7a2a3c | 130 | } |
jurica238814 | 2:1fa08c7a2a3c | 131 | |
jurica238814 | 2:1fa08c7a2a3c | 132 | uint8_t Lis2dh12::int1Latch(uint8_t enable){ |
jurica238814 | 2:1fa08c7a2a3c | 133 | char ctrl5Copy; |
jurica238814 | 2:1fa08c7a2a3c | 134 | i2c.readFromReg((char)CTRL_REG5, &ctrl5Copy, 1); |
jurica238814 | 2:1fa08c7a2a3c | 135 | ctrl5Copy |= enable; |
jurica238814 | 2:1fa08c7a2a3c | 136 | i2c.writeToReg((char)CTRL_REG5, &ctrl5Copy, 1); |
jurica238814 | 3:07ddb07f8b7f | 137 | return 0; |
jurica238814 | 2:1fa08c7a2a3c | 138 | } |
jurica238814 | 2:1fa08c7a2a3c | 139 | |
jurica238814 | 2:1fa08c7a2a3c | 140 | uint8_t Lis2dh12::int1Duration(uint8_t duration){ |
jurica238814 | 2:1fa08c7a2a3c | 141 | char copy = duration; |
jurica238814 | 2:1fa08c7a2a3c | 142 | i2c.writeToReg((char)INT1_DURATION, ©, 1); |
jurica238814 | 2:1fa08c7a2a3c | 143 | return 0; |
jurica238814 | 2:1fa08c7a2a3c | 144 | } |
jurica238814 | 2:1fa08c7a2a3c | 145 | |
jurica238814 | 2:1fa08c7a2a3c | 146 | uint8_t Lis2dh12::int1Threshold(uint8_t threshold){ |
jurica238814 | 2:1fa08c7a2a3c | 147 | char copy = threshold; |
jurica238814 | 2:1fa08c7a2a3c | 148 | i2c.writeToReg((char)INT1_THS, ©, 1); |
jurica238814 | 2:1fa08c7a2a3c | 149 | return 0; |
jurica238814 | 2:1fa08c7a2a3c | 150 | } |
jurica238814 | 2:1fa08c7a2a3c | 151 | |
jurica238814 | 2:1fa08c7a2a3c | 152 | uint8_t Lis2dh12::int1Config(uint8_t config){ |
jurica238814 | 2:1fa08c7a2a3c | 153 | char copy = config; |
jurica238814 | 2:1fa08c7a2a3c | 154 | i2c.writeToReg((char)INT1_CFG, ©, 1); |
jurica238814 | 2:1fa08c7a2a3c | 155 | return 0; |
jurica238814 | 2:1fa08c7a2a3c | 156 | } |
jurica238814 | 2:1fa08c7a2a3c | 157 | |
jurica238814 | 2:1fa08c7a2a3c | 158 | void Lis2dh12::clearIntFlag(){ |
jurica238814 | 2:1fa08c7a2a3c | 159 | char data; |
jurica238814 | 2:1fa08c7a2a3c | 160 | i2c.readFromReg((char)INT1_SRC, (char*)&data, 1); |
jurica238814 | 2:1fa08c7a2a3c | 161 | } |
jurica238814 | 0:cc5d477d5dbe | 162 | |
jurica238814 | 0:cc5d477d5dbe | 163 |