Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: BLE_Nano_MPU6050Service
MPU6050.cpp@0:95916b07e8be, 2015-06-30 (annotated)
- Committer:
- fruediger
- Date:
- Tue Jun 30 23:52:31 2015 +0000
- Revision:
- 0:95916b07e8be
- Child:
- 1:96a227d1ca7e
added new "MPU6050" library as an abstraction layer for the I2C communication with the MPU6050
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| fruediger | 0:95916b07e8be | 1 | #include "MPU6050.h" |
| fruediger | 0:95916b07e8be | 2 | |
| fruediger | 0:95916b07e8be | 3 | /** |
| fruediger | 0:95916b07e8be | 4 | * Read and write registers |
| fruediger | 0:95916b07e8be | 5 | */ |
| fruediger | 0:95916b07e8be | 6 | |
| fruediger | 0:95916b07e8be | 7 | bool MPU6050::read(Register reg, uint8_t *data, size_t length, float timeout_secs) |
| fruediger | 0:95916b07e8be | 8 | { |
| fruediger | 0:95916b07e8be | 9 | float t = 0.0f; |
| fruediger | 0:95916b07e8be | 10 | |
| fruediger | 0:95916b07e8be | 11 | uint8_t tmp = reg; |
| fruediger | 0:95916b07e8be | 12 | |
| fruediger | 0:95916b07e8be | 13 | while (!(i2c.write(baseAddress, (char*)&tmp, 1, true) == 0)) |
| fruediger | 0:95916b07e8be | 14 | if ((t += retryDelay_secs) > timeout_secs) |
| fruediger | 0:95916b07e8be | 15 | return false; |
| fruediger | 0:95916b07e8be | 16 | else |
| fruediger | 0:95916b07e8be | 17 | wait(retryDelay_secs); |
| fruediger | 0:95916b07e8be | 18 | |
| fruediger | 0:95916b07e8be | 19 | while (!(i2c.read(baseAddress, (char*)data, length) == 0)) |
| fruediger | 0:95916b07e8be | 20 | if ((t += retryDelay_secs) > timeout_secs) |
| fruediger | 0:95916b07e8be | 21 | return false; |
| fruediger | 0:95916b07e8be | 22 | else |
| fruediger | 0:95916b07e8be | 23 | wait(retryDelay_secs); |
| fruediger | 0:95916b07e8be | 24 | |
| fruediger | 0:95916b07e8be | 25 | return true; |
| fruediger | 0:95916b07e8be | 26 | } |
| fruediger | 0:95916b07e8be | 27 | |
| fruediger | 0:95916b07e8be | 28 | bool MPU6050::read(Register reg, uint8_t *data, float timeout_secs) |
| fruediger | 0:95916b07e8be | 29 | { |
| fruediger | 0:95916b07e8be | 30 | return this->read(reg, data, 1, timeout_secs); |
| fruediger | 0:95916b07e8be | 31 | } |
| fruediger | 0:95916b07e8be | 32 | |
| fruediger | 0:95916b07e8be | 33 | bool MPU6050::write(Register reg, uint8_t *data, size_t length, float timeout_secs) |
| fruediger | 0:95916b07e8be | 34 | { |
| fruediger | 0:95916b07e8be | 35 | uint8_t tmp[length + 1]; |
| fruediger | 0:95916b07e8be | 36 | tmp[0] = reg; |
| fruediger | 0:95916b07e8be | 37 | memcpy(&tmp[1], data, length); |
| fruediger | 0:95916b07e8be | 38 | |
| fruediger | 0:95916b07e8be | 39 | for (float t = 0.0f; !(i2c.write(baseAddress, (char*)&tmp[0], length + 1) == 0);) |
| fruediger | 0:95916b07e8be | 40 | if ((t += retryDelay_secs) > timeout_secs) |
| fruediger | 0:95916b07e8be | 41 | return false; |
| fruediger | 0:95916b07e8be | 42 | else |
| fruediger | 0:95916b07e8be | 43 | wait(retryDelay_secs); |
| fruediger | 0:95916b07e8be | 44 | |
| fruediger | 0:95916b07e8be | 45 | return true; |
| fruediger | 0:95916b07e8be | 46 | } |
| fruediger | 0:95916b07e8be | 47 | |
| fruediger | 0:95916b07e8be | 48 | bool MPU6050::write(Register reg, uint8_t data, float timeout_secs) |
| fruediger | 0:95916b07e8be | 49 | { |
| fruediger | 0:95916b07e8be | 50 | return this->write(reg, &data, 1, timeout_secs); |
| fruediger | 0:95916b07e8be | 51 | } |
| fruediger | 0:95916b07e8be | 52 | |
| fruediger | 0:95916b07e8be | 53 | /** |
| fruediger | 0:95916b07e8be | 54 | * AUX_VDDIO register |
| fruediger | 0:95916b07e8be | 55 | */ |
| fruediger | 0:95916b07e8be | 56 | |
| fruediger | 0:95916b07e8be | 57 | bool MPU6050::getAuxVDDIOLevel(AuxVDDIOLevel *level, float timeout_secs) |
| fruediger | 0:95916b07e8be | 58 | { |
| fruediger | 0:95916b07e8be | 59 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 60 | if (this->read(REG_AUX_VDDIO, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 61 | { |
| fruediger | 0:95916b07e8be | 62 | level[0] = static_cast<AuxVDDIOLevel>(tmp & AUX_VDDIO_MASK); |
| fruediger | 0:95916b07e8be | 63 | return true; |
| fruediger | 0:95916b07e8be | 64 | } |
| fruediger | 0:95916b07e8be | 65 | |
| fruediger | 0:95916b07e8be | 66 | return false; |
| fruediger | 0:95916b07e8be | 67 | } |
| fruediger | 0:95916b07e8be | 68 | |
| fruediger | 0:95916b07e8be | 69 | bool MPU6050::setAuxVDDIOLevel(AuxVDDIOLevel level, float timeout_secs) |
| fruediger | 0:95916b07e8be | 70 | { |
| fruediger | 0:95916b07e8be | 71 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 72 | return (this->read(REG_AUX_VDDIO, &tmp, timeout_secs)) && (this->write(REG_AUX_VDDIO, (tmp & (~AUX_VDDIO_MASK)) | level, timeout_secs)); |
| fruediger | 0:95916b07e8be | 73 | } |
| fruediger | 0:95916b07e8be | 74 | |
| fruediger | 0:95916b07e8be | 75 | /** |
| fruediger | 0:95916b07e8be | 76 | * REG_SMPLRT_DIV register |
| fruediger | 0:95916b07e8be | 77 | */ |
| fruediger | 0:95916b07e8be | 78 | |
| fruediger | 0:95916b07e8be | 79 | bool MPU6050::getGyroSampleRateDivider(uint8_t *rateDivider, float timeout_secs) |
| fruediger | 0:95916b07e8be | 80 | { |
| fruediger | 0:95916b07e8be | 81 | return this->read(REG_SMPLRT_DIV, rateDivider, timeout_secs); |
| fruediger | 0:95916b07e8be | 82 | } |
| fruediger | 0:95916b07e8be | 83 | |
| fruediger | 0:95916b07e8be | 84 | bool MPU6050::setGyroSampleRateDivider(uint8_t rateDivider, float timeout_secs) |
| fruediger | 0:95916b07e8be | 85 | { |
| fruediger | 0:95916b07e8be | 86 | return this->write(REG_SMPLRT_DIV, rateDivider, timeout_secs); |
| fruediger | 0:95916b07e8be | 87 | } |
| fruediger | 0:95916b07e8be | 88 | |
| fruediger | 0:95916b07e8be | 89 | /** |
| fruediger | 0:95916b07e8be | 90 | * REG_CONFIG register |
| fruediger | 0:95916b07e8be | 91 | */ |
| fruediger | 0:95916b07e8be | 92 | |
| fruediger | 0:95916b07e8be | 93 | bool MPU6050::getExternalFrameSync(ExtFrameSync *frameSync, float timeout_secs) |
| fruediger | 0:95916b07e8be | 94 | { |
| fruediger | 0:95916b07e8be | 95 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 96 | if (this->read(REG_CONFIG, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 97 | { |
| fruediger | 0:95916b07e8be | 98 | frameSync[0] = static_cast<ExtFrameSync>(tmp & EXT_SYNC_MASK); |
| fruediger | 0:95916b07e8be | 99 | return true; |
| fruediger | 0:95916b07e8be | 100 | } |
| fruediger | 0:95916b07e8be | 101 | |
| fruediger | 0:95916b07e8be | 102 | return false; |
| fruediger | 0:95916b07e8be | 103 | } |
| fruediger | 0:95916b07e8be | 104 | |
| fruediger | 0:95916b07e8be | 105 | bool MPU6050::setExternalFrameSync(ExtFrameSync frameSync, float timeout_secs) |
| fruediger | 0:95916b07e8be | 106 | { |
| fruediger | 0:95916b07e8be | 107 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 108 | return (this->read(REG_CONFIG, &tmp, timeout_secs)) && (this->write(REG_CONFIG, (tmp & (~EXT_SYNC_MASK)) | frameSync, timeout_secs)); |
| fruediger | 0:95916b07e8be | 109 | } |
| fruediger | 0:95916b07e8be | 110 | |
| fruediger | 0:95916b07e8be | 111 | bool MPU6050::getDLPFBandwidth(DLPFBandwidth *bandwith, float timeout_secs) |
| fruediger | 0:95916b07e8be | 112 | { |
| fruediger | 0:95916b07e8be | 113 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 114 | if (this->read(REG_CONFIG, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 115 | { |
| fruediger | 0:95916b07e8be | 116 | bandwith[0] = static_cast<DLPFBandwidth>(tmp & DLPF_MASK); |
| fruediger | 0:95916b07e8be | 117 | return true; |
| fruediger | 0:95916b07e8be | 118 | } |
| fruediger | 0:95916b07e8be | 119 | |
| fruediger | 0:95916b07e8be | 120 | return false; |
| fruediger | 0:95916b07e8be | 121 | } |
| fruediger | 0:95916b07e8be | 122 | |
| fruediger | 0:95916b07e8be | 123 | bool MPU6050::setDLPFBandwidth(DLPFBandwidth bandwith, float timeout_secs) |
| fruediger | 0:95916b07e8be | 124 | { |
| fruediger | 0:95916b07e8be | 125 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 126 | return (this->read(REG_CONFIG, &tmp, timeout_secs)) && (this->write(REG_CONFIG, (tmp & (~DLPF_MASK)) | bandwith, timeout_secs)); |
| fruediger | 0:95916b07e8be | 127 | } |
| fruediger | 0:95916b07e8be | 128 | |
| fruediger | 0:95916b07e8be | 129 | /** |
| fruediger | 0:95916b07e8be | 130 | * REG_GYRO_CONFIG register |
| fruediger | 0:95916b07e8be | 131 | */ |
| fruediger | 0:95916b07e8be | 132 | |
| fruediger | 0:95916b07e8be | 133 | bool MPU6050::getGyroXSelfTestEnabled(bool *enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 134 | { |
| fruediger | 0:95916b07e8be | 135 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 136 | if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 137 | { |
| fruediger | 0:95916b07e8be | 138 | enabled[0] = ((tmp & GYRO_X_ST_MASK) != 0); |
| fruediger | 0:95916b07e8be | 139 | return true; |
| fruediger | 0:95916b07e8be | 140 | } |
| fruediger | 0:95916b07e8be | 141 | |
| fruediger | 0:95916b07e8be | 142 | return false; |
| fruediger | 0:95916b07e8be | 143 | } |
| fruediger | 0:95916b07e8be | 144 | |
| fruediger | 0:95916b07e8be | 145 | bool MPU6050::setGyroXSelfTestEnabled(bool enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 146 | { |
| fruediger | 0:95916b07e8be | 147 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 148 | if (this->read(REG_GYRO_CONFIG, &tmp)) |
| fruediger | 0:95916b07e8be | 149 | { |
| fruediger | 0:95916b07e8be | 150 | tmp &= ~(GYRO_X_ST_MASK); |
| fruediger | 0:95916b07e8be | 151 | return this->write(REG_GYRO_CONFIG, enabled ? (tmp | GYRO_X_ST_MASK) : tmp); |
| fruediger | 0:95916b07e8be | 152 | } |
| fruediger | 0:95916b07e8be | 153 | return false; |
| fruediger | 0:95916b07e8be | 154 | } |
| fruediger | 0:95916b07e8be | 155 | |
| fruediger | 0:95916b07e8be | 156 | bool MPU6050::getGyroYSelfTestEnabled(bool *enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 157 | { |
| fruediger | 0:95916b07e8be | 158 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 159 | if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 160 | { |
| fruediger | 0:95916b07e8be | 161 | enabled[0] = ((tmp & GYRO_Y_ST_MASK) != 0); |
| fruediger | 0:95916b07e8be | 162 | return true; |
| fruediger | 0:95916b07e8be | 163 | } |
| fruediger | 0:95916b07e8be | 164 | |
| fruediger | 0:95916b07e8be | 165 | return false; |
| fruediger | 0:95916b07e8be | 166 | } |
| fruediger | 0:95916b07e8be | 167 | |
| fruediger | 0:95916b07e8be | 168 | bool MPU6050::setGyroYSelfTestEnabled(bool enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 169 | { |
| fruediger | 0:95916b07e8be | 170 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 171 | if (this->read(REG_GYRO_CONFIG, &tmp)) |
| fruediger | 0:95916b07e8be | 172 | { |
| fruediger | 0:95916b07e8be | 173 | tmp &= ~(GYRO_Y_ST_MASK); |
| fruediger | 0:95916b07e8be | 174 | return this->write(REG_GYRO_CONFIG, enabled ? (tmp | GYRO_Y_ST_MASK) : tmp); |
| fruediger | 0:95916b07e8be | 175 | } |
| fruediger | 0:95916b07e8be | 176 | return false; |
| fruediger | 0:95916b07e8be | 177 | } |
| fruediger | 0:95916b07e8be | 178 | |
| fruediger | 0:95916b07e8be | 179 | bool MPU6050::getGyroZSelfTestEnabled(bool *enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 180 | { |
| fruediger | 0:95916b07e8be | 181 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 182 | if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 183 | { |
| fruediger | 0:95916b07e8be | 184 | enabled[0] = ((tmp & GYRO_Z_ST_MASK) != 0); |
| fruediger | 0:95916b07e8be | 185 | return true; |
| fruediger | 0:95916b07e8be | 186 | } |
| fruediger | 0:95916b07e8be | 187 | |
| fruediger | 0:95916b07e8be | 188 | return false; |
| fruediger | 0:95916b07e8be | 189 | } |
| fruediger | 0:95916b07e8be | 190 | |
| fruediger | 0:95916b07e8be | 191 | bool MPU6050::setGyroZSelfTestEnabled(bool enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 192 | { |
| fruediger | 0:95916b07e8be | 193 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 194 | if (this->read(REG_GYRO_CONFIG, &tmp)) |
| fruediger | 0:95916b07e8be | 195 | { |
| fruediger | 0:95916b07e8be | 196 | tmp &= ~(GYRO_Z_ST_MASK); |
| fruediger | 0:95916b07e8be | 197 | return this->write(REG_GYRO_CONFIG, enabled ? (tmp | GYRO_Z_ST_MASK) : tmp); |
| fruediger | 0:95916b07e8be | 198 | } |
| fruediger | 0:95916b07e8be | 199 | return false; |
| fruediger | 0:95916b07e8be | 200 | } |
| fruediger | 0:95916b07e8be | 201 | |
| fruediger | 0:95916b07e8be | 202 | bool MPU6050::getGyroRange(GyroRange *gyroRange, float timeout_secs) |
| fruediger | 0:95916b07e8be | 203 | { |
| fruediger | 0:95916b07e8be | 204 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 205 | if (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 206 | { |
| fruediger | 0:95916b07e8be | 207 | gyroRange[0] = static_cast<GyroRange>(tmp & GYRO_RANGE_MASK); |
| fruediger | 0:95916b07e8be | 208 | return true; |
| fruediger | 0:95916b07e8be | 209 | } |
| fruediger | 0:95916b07e8be | 210 | |
| fruediger | 0:95916b07e8be | 211 | return false; |
| fruediger | 0:95916b07e8be | 212 | } |
| fruediger | 0:95916b07e8be | 213 | |
| fruediger | 0:95916b07e8be | 214 | bool MPU6050::setGyroRange(GyroRange gyroRange, float timeout_secs) |
| fruediger | 0:95916b07e8be | 215 | { |
| fruediger | 0:95916b07e8be | 216 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 217 | return (this->read(REG_GYRO_CONFIG, &tmp, timeout_secs)) && (this->write(REG_GYRO_CONFIG, (tmp & (~GYRO_RANGE_MASK)) | gyroRange, timeout_secs)); |
| fruediger | 0:95916b07e8be | 218 | } |
| fruediger | 0:95916b07e8be | 219 | |
| fruediger | 0:95916b07e8be | 220 | /** |
| fruediger | 0:95916b07e8be | 221 | * REG_ACCEL_CONFIG register |
| fruediger | 0:95916b07e8be | 222 | */ |
| fruediger | 0:95916b07e8be | 223 | |
| fruediger | 0:95916b07e8be | 224 | bool MPU6050::getAccelXSelfTestEnabled(bool *enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 225 | { |
| fruediger | 0:95916b07e8be | 226 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 227 | if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 228 | { |
| fruediger | 0:95916b07e8be | 229 | enabled[0] = ((tmp & ACCEL_X_ST_MASK) != 0); |
| fruediger | 0:95916b07e8be | 230 | return true; |
| fruediger | 0:95916b07e8be | 231 | } |
| fruediger | 0:95916b07e8be | 232 | |
| fruediger | 0:95916b07e8be | 233 | return false; |
| fruediger | 0:95916b07e8be | 234 | } |
| fruediger | 0:95916b07e8be | 235 | |
| fruediger | 0:95916b07e8be | 236 | bool MPU6050::setAccelXSelfTestEnabled(bool enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 237 | { |
| fruediger | 0:95916b07e8be | 238 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 239 | if (this->read(REG_ACCEL_CONFIG, &tmp)) |
| fruediger | 0:95916b07e8be | 240 | { |
| fruediger | 0:95916b07e8be | 241 | tmp &= ~(ACCEL_X_ST_MASK); |
| fruediger | 0:95916b07e8be | 242 | return this->write(REG_ACCEL_CONFIG, enabled ? (tmp | ACCEL_X_ST_MASK) : tmp); |
| fruediger | 0:95916b07e8be | 243 | } |
| fruediger | 0:95916b07e8be | 244 | return false; |
| fruediger | 0:95916b07e8be | 245 | } |
| fruediger | 0:95916b07e8be | 246 | |
| fruediger | 0:95916b07e8be | 247 | bool MPU6050::getAccelYSelfTestEnabled(bool *enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 248 | { |
| fruediger | 0:95916b07e8be | 249 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 250 | if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 251 | { |
| fruediger | 0:95916b07e8be | 252 | enabled[0] = ((tmp & ACCEL_Y_ST_MASK) != 0); |
| fruediger | 0:95916b07e8be | 253 | return true; |
| fruediger | 0:95916b07e8be | 254 | } |
| fruediger | 0:95916b07e8be | 255 | |
| fruediger | 0:95916b07e8be | 256 | return false; |
| fruediger | 0:95916b07e8be | 257 | } |
| fruediger | 0:95916b07e8be | 258 | |
| fruediger | 0:95916b07e8be | 259 | bool MPU6050::setAccelYSelfTestEnabled(bool enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 260 | { |
| fruediger | 0:95916b07e8be | 261 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 262 | if (this->read(REG_ACCEL_CONFIG, &tmp)) |
| fruediger | 0:95916b07e8be | 263 | { |
| fruediger | 0:95916b07e8be | 264 | tmp &= ~(ACCEL_Y_ST_MASK); |
| fruediger | 0:95916b07e8be | 265 | return this->write(REG_ACCEL_CONFIG, enabled ? (tmp | ACCEL_Y_ST_MASK) : tmp); |
| fruediger | 0:95916b07e8be | 266 | } |
| fruediger | 0:95916b07e8be | 267 | return false; |
| fruediger | 0:95916b07e8be | 268 | } |
| fruediger | 0:95916b07e8be | 269 | |
| fruediger | 0:95916b07e8be | 270 | bool MPU6050::getAccelZSelfTestEnabled(bool *enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 271 | { |
| fruediger | 0:95916b07e8be | 272 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 273 | if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 274 | { |
| fruediger | 0:95916b07e8be | 275 | enabled[0] = ((tmp & ACCEL_Z_ST_MASK) != 0); |
| fruediger | 0:95916b07e8be | 276 | return true; |
| fruediger | 0:95916b07e8be | 277 | } |
| fruediger | 0:95916b07e8be | 278 | |
| fruediger | 0:95916b07e8be | 279 | return false; |
| fruediger | 0:95916b07e8be | 280 | } |
| fruediger | 0:95916b07e8be | 281 | |
| fruediger | 0:95916b07e8be | 282 | bool MPU6050::setAccelZSelfTestEnabled(bool enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 283 | { |
| fruediger | 0:95916b07e8be | 284 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 285 | if (this->read(REG_ACCEL_CONFIG, &tmp)) |
| fruediger | 0:95916b07e8be | 286 | { |
| fruediger | 0:95916b07e8be | 287 | tmp &= ~(ACCEL_Z_ST_MASK); |
| fruediger | 0:95916b07e8be | 288 | return this->write(REG_ACCEL_CONFIG, enabled ? (tmp | ACCEL_Z_ST_MASK) : tmp); |
| fruediger | 0:95916b07e8be | 289 | } |
| fruediger | 0:95916b07e8be | 290 | return false; |
| fruediger | 0:95916b07e8be | 291 | } |
| fruediger | 0:95916b07e8be | 292 | |
| fruediger | 0:95916b07e8be | 293 | bool MPU6050::getAccelHPFCutOff(AccelHPFCutOff *frequency, float timeout_secs) |
| fruediger | 0:95916b07e8be | 294 | { |
| fruediger | 0:95916b07e8be | 295 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 296 | if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 297 | { |
| fruediger | 0:95916b07e8be | 298 | frequency[0] = static_cast<AccelHPFCutOff>(tmp & ACCEL_HPF_MASK); |
| fruediger | 0:95916b07e8be | 299 | return true; |
| fruediger | 0:95916b07e8be | 300 | } |
| fruediger | 0:95916b07e8be | 301 | |
| fruediger | 0:95916b07e8be | 302 | return false; |
| fruediger | 0:95916b07e8be | 303 | } |
| fruediger | 0:95916b07e8be | 304 | |
| fruediger | 0:95916b07e8be | 305 | bool MPU6050::setAccelHPFCutOff(AccelHPFCutOff frequency, float timeout_secs) |
| fruediger | 0:95916b07e8be | 306 | { |
| fruediger | 0:95916b07e8be | 307 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 308 | return (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs)) && (this->write(REG_ACCEL_CONFIG, (tmp & (~ACCEL_HPF_MASK)) | frequency, timeout_secs)); |
| fruediger | 0:95916b07e8be | 309 | } |
| fruediger | 0:95916b07e8be | 310 | |
| fruediger | 0:95916b07e8be | 311 | bool MPU6050::getAccelRange(AccelRange *accelRange, float timeout_secs) |
| fruediger | 0:95916b07e8be | 312 | { |
| fruediger | 0:95916b07e8be | 313 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 314 | if (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 315 | { |
| fruediger | 0:95916b07e8be | 316 | accelRange[0] = static_cast<AccelRange>(tmp & ACCEL_RANGE_MASK); |
| fruediger | 0:95916b07e8be | 317 | return true; |
| fruediger | 0:95916b07e8be | 318 | } |
| fruediger | 0:95916b07e8be | 319 | |
| fruediger | 0:95916b07e8be | 320 | return false; |
| fruediger | 0:95916b07e8be | 321 | } |
| fruediger | 0:95916b07e8be | 322 | |
| fruediger | 0:95916b07e8be | 323 | bool MPU6050::setAccelRange(AccelRange accelRange, float timeout_secs) |
| fruediger | 0:95916b07e8be | 324 | { |
| fruediger | 0:95916b07e8be | 325 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 326 | return (this->read(REG_ACCEL_CONFIG, &tmp, timeout_secs)) && (this->write(REG_ACCEL_CONFIG, (tmp & (~ACCEL_RANGE_MASK)) | accelRange, timeout_secs)); |
| fruediger | 0:95916b07e8be | 327 | } |
| fruediger | 0:95916b07e8be | 328 | |
| fruediger | 0:95916b07e8be | 329 | /** |
| fruediger | 0:95916b07e8be | 330 | * REG_FF_THR register |
| fruediger | 0:95916b07e8be | 331 | */ |
| fruediger | 0:95916b07e8be | 332 | |
| fruediger | 0:95916b07e8be | 333 | bool MPU6050::getFreefallDetectionThreshold(uint8_t *threshold, float timeout_secs) |
| fruediger | 0:95916b07e8be | 334 | { |
| fruediger | 0:95916b07e8be | 335 | return this->read(REG_FF_THR, threshold, timeout_secs); |
| fruediger | 0:95916b07e8be | 336 | } |
| fruediger | 0:95916b07e8be | 337 | |
| fruediger | 0:95916b07e8be | 338 | bool MPU6050::setFreefallDetectionThreshold(uint8_t threshold, float timeout_secs) |
| fruediger | 0:95916b07e8be | 339 | { |
| fruediger | 0:95916b07e8be | 340 | return this->write(REG_FF_THR, threshold, timeout_secs); |
| fruediger | 0:95916b07e8be | 341 | } |
| fruediger | 0:95916b07e8be | 342 | |
| fruediger | 0:95916b07e8be | 343 | /** |
| fruediger | 0:95916b07e8be | 344 | * REG_FF_DUR register |
| fruediger | 0:95916b07e8be | 345 | */ |
| fruediger | 0:95916b07e8be | 346 | |
| fruediger | 0:95916b07e8be | 347 | bool MPU6050::getFreefallDetectionDuration(uint8_t *duration, float timeout_secs) |
| fruediger | 0:95916b07e8be | 348 | { |
| fruediger | 0:95916b07e8be | 349 | return this->read(REG_FF_DUR, duration, timeout_secs); |
| fruediger | 0:95916b07e8be | 350 | } |
| fruediger | 0:95916b07e8be | 351 | |
| fruediger | 0:95916b07e8be | 352 | bool MPU6050::setFreefallDetectionDuration(uint8_t duration, float timeout_secs) |
| fruediger | 0:95916b07e8be | 353 | { |
| fruediger | 0:95916b07e8be | 354 | return this->write(REG_FF_DUR, duration, timeout_secs); |
| fruediger | 0:95916b07e8be | 355 | } |
| fruediger | 0:95916b07e8be | 356 | |
| fruediger | 0:95916b07e8be | 357 | /** |
| fruediger | 0:95916b07e8be | 358 | * REG_MOT_THR register |
| fruediger | 0:95916b07e8be | 359 | */ |
| fruediger | 0:95916b07e8be | 360 | |
| fruediger | 0:95916b07e8be | 361 | bool MPU6050::getMotionDetectionThreshold(uint8_t *threshold, float timeout_secs) |
| fruediger | 0:95916b07e8be | 362 | { |
| fruediger | 0:95916b07e8be | 363 | return this->read(REG_MOT_THR, threshold, timeout_secs); |
| fruediger | 0:95916b07e8be | 364 | } |
| fruediger | 0:95916b07e8be | 365 | |
| fruediger | 0:95916b07e8be | 366 | bool MPU6050::setMotionDetectionThreshold(uint8_t threshold, float timeout_secs) |
| fruediger | 0:95916b07e8be | 367 | { |
| fruediger | 0:95916b07e8be | 368 | return this->write(REG_MOT_THR, threshold, timeout_secs); |
| fruediger | 0:95916b07e8be | 369 | } |
| fruediger | 0:95916b07e8be | 370 | |
| fruediger | 0:95916b07e8be | 371 | /** |
| fruediger | 0:95916b07e8be | 372 | * REG_MOT_DUR register |
| fruediger | 0:95916b07e8be | 373 | */ |
| fruediger | 0:95916b07e8be | 374 | |
| fruediger | 0:95916b07e8be | 375 | bool MPU6050::getMotionDetectionDuration(uint8_t *duration, float timeout_secs) |
| fruediger | 0:95916b07e8be | 376 | { |
| fruediger | 0:95916b07e8be | 377 | return this->read(REG_MOT_DUR, duration, timeout_secs); |
| fruediger | 0:95916b07e8be | 378 | } |
| fruediger | 0:95916b07e8be | 379 | |
| fruediger | 0:95916b07e8be | 380 | bool MPU6050::setMotionDetectionDuration(uint8_t duration, float timeout_secs) |
| fruediger | 0:95916b07e8be | 381 | { |
| fruediger | 0:95916b07e8be | 382 | return this->write(REG_MOT_DUR, duration, timeout_secs); |
| fruediger | 0:95916b07e8be | 383 | } |
| fruediger | 0:95916b07e8be | 384 | |
| fruediger | 0:95916b07e8be | 385 | /** |
| fruediger | 0:95916b07e8be | 386 | * REG_ZRMOT_THR register |
| fruediger | 0:95916b07e8be | 387 | */ |
| fruediger | 0:95916b07e8be | 388 | |
| fruediger | 0:95916b07e8be | 389 | bool MPU6050::getZeroMotionDetectionThreshold(uint8_t *threshold, float timeout_secs) |
| fruediger | 0:95916b07e8be | 390 | { |
| fruediger | 0:95916b07e8be | 391 | return this->read(REG_ZRMOT_THR, threshold, timeout_secs); |
| fruediger | 0:95916b07e8be | 392 | } |
| fruediger | 0:95916b07e8be | 393 | |
| fruediger | 0:95916b07e8be | 394 | bool MPU6050::setZeroMotionDetectionThreshold(uint8_t threshold, float timeout_secs) |
| fruediger | 0:95916b07e8be | 395 | { |
| fruediger | 0:95916b07e8be | 396 | return this->write(REG_ZRMOT_THR, threshold, timeout_secs); |
| fruediger | 0:95916b07e8be | 397 | } |
| fruediger | 0:95916b07e8be | 398 | |
| fruediger | 0:95916b07e8be | 399 | /** |
| fruediger | 0:95916b07e8be | 400 | * REG_ZRMOT_DUR register |
| fruediger | 0:95916b07e8be | 401 | */ |
| fruediger | 0:95916b07e8be | 402 | |
| fruediger | 0:95916b07e8be | 403 | bool MPU6050::getZeroMotionDetectionDuration(uint8_t *duration, float timeout_secs) |
| fruediger | 0:95916b07e8be | 404 | { |
| fruediger | 0:95916b07e8be | 405 | return this->read(REG_ZRMOT_DUR, duration, timeout_secs); |
| fruediger | 0:95916b07e8be | 406 | } |
| fruediger | 0:95916b07e8be | 407 | |
| fruediger | 0:95916b07e8be | 408 | bool MPU6050::setZeroMotionDetectionDuration(uint8_t duration, float timeout_secs) |
| fruediger | 0:95916b07e8be | 409 | { |
| fruediger | 0:95916b07e8be | 410 | return this->write(REG_ZRMOT_DUR, duration, timeout_secs); |
| fruediger | 0:95916b07e8be | 411 | } |
| fruediger | 0:95916b07e8be | 412 | |
| fruediger | 0:95916b07e8be | 413 | /** |
| fruediger | 0:95916b07e8be | 414 | * REG_FIFO_EN register |
| fruediger | 0:95916b07e8be | 415 | */ |
| fruediger | 0:95916b07e8be | 416 | |
| fruediger | 0:95916b07e8be | 417 | bool MPU6050::getTempFIFOEnabled(bool *enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 418 | { |
| fruediger | 0:95916b07e8be | 419 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 420 | if (this->read(REG_FIFO_EN, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 421 | { |
| fruediger | 0:95916b07e8be | 422 | enabled[0] = ((tmp & TEMP_FIFO_EN_MASK) != 0); |
| fruediger | 0:95916b07e8be | 423 | return true; |
| fruediger | 0:95916b07e8be | 424 | } |
| fruediger | 0:95916b07e8be | 425 | |
| fruediger | 0:95916b07e8be | 426 | return false; |
| fruediger | 0:95916b07e8be | 427 | } |
| fruediger | 0:95916b07e8be | 428 | |
| fruediger | 0:95916b07e8be | 429 | bool MPU6050::setTempFIFOEnabled(bool enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 430 | { |
| fruediger | 0:95916b07e8be | 431 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 432 | if (this->read(REG_FIFO_EN, &tmp)) |
| fruediger | 0:95916b07e8be | 433 | { |
| fruediger | 0:95916b07e8be | 434 | tmp &= ~(TEMP_FIFO_EN_MASK); |
| fruediger | 0:95916b07e8be | 435 | return this->write(REG_FIFO_EN, enabled ? (tmp | TEMP_FIFO_EN_MASK) : tmp); |
| fruediger | 0:95916b07e8be | 436 | } |
| fruediger | 0:95916b07e8be | 437 | return false; |
| fruediger | 0:95916b07e8be | 438 | } |
| fruediger | 0:95916b07e8be | 439 | |
| fruediger | 0:95916b07e8be | 440 | bool MPU6050::getGyroXFIFOEnabled(bool *enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 441 | { |
| fruediger | 0:95916b07e8be | 442 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 443 | if (this->read(REG_FIFO_EN, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 444 | { |
| fruediger | 0:95916b07e8be | 445 | enabled[0] = ((tmp & GYRO_X_FIFO_EN_MASK) != 0); |
| fruediger | 0:95916b07e8be | 446 | return true; |
| fruediger | 0:95916b07e8be | 447 | } |
| fruediger | 0:95916b07e8be | 448 | |
| fruediger | 0:95916b07e8be | 449 | return false; |
| fruediger | 0:95916b07e8be | 450 | } |
| fruediger | 0:95916b07e8be | 451 | |
| fruediger | 0:95916b07e8be | 452 | bool MPU6050::setGyroXFIFOEnabled(bool enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 453 | { |
| fruediger | 0:95916b07e8be | 454 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 455 | if (this->read(REG_FIFO_EN, &tmp)) |
| fruediger | 0:95916b07e8be | 456 | { |
| fruediger | 0:95916b07e8be | 457 | tmp &= ~(GYRO_X_FIFO_EN_MASK); |
| fruediger | 0:95916b07e8be | 458 | return this->write(REG_FIFO_EN, enabled ? (tmp | GYRO_X_FIFO_EN_MASK) : tmp); |
| fruediger | 0:95916b07e8be | 459 | } |
| fruediger | 0:95916b07e8be | 460 | return false; |
| fruediger | 0:95916b07e8be | 461 | } |
| fruediger | 0:95916b07e8be | 462 | |
| fruediger | 0:95916b07e8be | 463 | bool MPU6050::getGyroYFIFOEnabled(bool *enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 464 | { |
| fruediger | 0:95916b07e8be | 465 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 466 | if (this->read(REG_FIFO_EN, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 467 | { |
| fruediger | 0:95916b07e8be | 468 | enabled[0] = ((tmp & GYRO_Y_FIFO_EN_MASK) != 0); |
| fruediger | 0:95916b07e8be | 469 | return true; |
| fruediger | 0:95916b07e8be | 470 | } |
| fruediger | 0:95916b07e8be | 471 | |
| fruediger | 0:95916b07e8be | 472 | return false; |
| fruediger | 0:95916b07e8be | 473 | } |
| fruediger | 0:95916b07e8be | 474 | |
| fruediger | 0:95916b07e8be | 475 | bool MPU6050::setGyroYFIFOEnabled(bool enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 476 | { |
| fruediger | 0:95916b07e8be | 477 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 478 | if (this->read(REG_FIFO_EN, &tmp)) |
| fruediger | 0:95916b07e8be | 479 | { |
| fruediger | 0:95916b07e8be | 480 | tmp &= ~(GYRO_Y_FIFO_EN_MASK); |
| fruediger | 0:95916b07e8be | 481 | return this->write(REG_FIFO_EN, enabled ? (tmp | GYRO_Y_FIFO_EN_MASK) : tmp); |
| fruediger | 0:95916b07e8be | 482 | } |
| fruediger | 0:95916b07e8be | 483 | return false; |
| fruediger | 0:95916b07e8be | 484 | } |
| fruediger | 0:95916b07e8be | 485 | |
| fruediger | 0:95916b07e8be | 486 | bool MPU6050::getGyroZFIFOEnabled(bool *enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 487 | { |
| fruediger | 0:95916b07e8be | 488 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 489 | if (this->read(REG_FIFO_EN, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 490 | { |
| fruediger | 0:95916b07e8be | 491 | enabled[0] = ((tmp & GYRO_Z_FIFO_EN_MASK) != 0); |
| fruediger | 0:95916b07e8be | 492 | return true; |
| fruediger | 0:95916b07e8be | 493 | } |
| fruediger | 0:95916b07e8be | 494 | |
| fruediger | 0:95916b07e8be | 495 | return false; |
| fruediger | 0:95916b07e8be | 496 | } |
| fruediger | 0:95916b07e8be | 497 | |
| fruediger | 0:95916b07e8be | 498 | bool MPU6050::setGyroZFIFOEnabled(bool enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 499 | { |
| fruediger | 0:95916b07e8be | 500 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 501 | if (this->read(REG_FIFO_EN, &tmp)) |
| fruediger | 0:95916b07e8be | 502 | { |
| fruediger | 0:95916b07e8be | 503 | tmp &= ~(GYRO_Z_FIFO_EN_MASK); |
| fruediger | 0:95916b07e8be | 504 | return this->write(REG_FIFO_EN, enabled ? (tmp | GYRO_Z_FIFO_EN_MASK) : tmp); |
| fruediger | 0:95916b07e8be | 505 | } |
| fruediger | 0:95916b07e8be | 506 | return false; |
| fruediger | 0:95916b07e8be | 507 | } |
| fruediger | 0:95916b07e8be | 508 | |
| fruediger | 0:95916b07e8be | 509 | bool MPU6050::getAccelFIFOEnabled(bool *enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 510 | { |
| fruediger | 0:95916b07e8be | 511 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 512 | if (this->read(REG_FIFO_EN, &tmp, timeout_secs)) |
| fruediger | 0:95916b07e8be | 513 | { |
| fruediger | 0:95916b07e8be | 514 | enabled[0] = ((tmp & ACCEL_FIFO_EN_MASK) != 0); |
| fruediger | 0:95916b07e8be | 515 | return true; |
| fruediger | 0:95916b07e8be | 516 | } |
| fruediger | 0:95916b07e8be | 517 | |
| fruediger | 0:95916b07e8be | 518 | return false; |
| fruediger | 0:95916b07e8be | 519 | } |
| fruediger | 0:95916b07e8be | 520 | |
| fruediger | 0:95916b07e8be | 521 | bool MPU6050::setAccelFIFOEnabled(bool enabled, float timeout_secs) |
| fruediger | 0:95916b07e8be | 522 | { |
| fruediger | 0:95916b07e8be | 523 | uint8_t tmp; |
| fruediger | 0:95916b07e8be | 524 | if (this->read(REG_FIFO_EN, &tmp)) |
| fruediger | 0:95916b07e8be | 525 | { |
| fruediger | 0:95916b07e8be | 526 | tmp &= ~(ACCEL_FIFO_EN_MASK); |
| fruediger | 0:95916b07e8be | 527 | return this->write(REG_FIFO_EN, enabled ? (tmp | ACCEL_FIFO_EN_MASK) : tmp); |
| fruediger | 0:95916b07e8be | 528 | } |
| fruediger | 0:95916b07e8be | 529 | return false; |
| fruediger | 0:95916b07e8be | 530 | } |
