20 extern uint8_t I2C_start(uint8_t i2c_address);
21 extern uint8_t I2C_address(uint8_t i2c_address, uint8_t address, uint8_t operation);
22 extern uint8_t I2C_write(uint8_t i2c_address, uint8_t byte);
23 extern uint8_t I2C_read(uint8_t i2c_address);
24 extern uint8_t I2C_repeatRead(uint8_t i2c_address);
25 extern uint8_t I2C_stop(uint8_t i2c_address);
33 target->
bus = i2c_num;
92 *container = (tempRead/340.0f) + 36.53f;
96 I2C_start(target->
bus);
98 I2C_write(target->
bus,MPU6050_ADD_ACCX);
99 I2C_start(target->
bus);
103 tempRead = (I2C_repeatRead(target->
bus) << 8);
104 tempRead |= (I2C_repeatRead(target->
bus));
108 tempRead = (I2C_repeatRead(target->
bus) << 8);
109 tempRead |= (I2C_repeatRead(target->
bus));
113 tempRead = (I2C_repeatRead(target->
bus) << 8);
114 I2C_stop(target->
bus);
115 tempRead |= (I2C_read(target->
bus));
121 I2C_start(target->
bus);
123 I2C_write(target->
bus,MPU6050_ADD_GYRX);
124 I2C_start(target->
bus);
128 tempRead = (I2C_repeatRead(target->
bus) << 8);
129 tempRead |= (I2C_repeatRead(target->
bus));
133 tempRead = (I2C_repeatRead(target->
bus) << 8);
134 tempRead |= (I2C_repeatRead(target->
bus));
138 tempRead = (I2C_repeatRead(target->
bus) << 8);
139 I2C_stop(target->
bus);
140 tempRead |= (I2C_read(target->
bus));
146 I2C_start(target->
bus);
148 I2C_write(target->
bus,MPU6050_ADD_ACCX);
149 I2C_start(target->
bus);
153 tempRead = (I2C_repeatRead(target->
bus) << 8);
154 tempRead |= (I2C_repeatRead(target->
bus));
158 tempRead = (I2C_repeatRead(target->
bus) << 8);
159 tempRead |= (I2C_repeatRead(target->
bus));
163 tempRead = (I2C_repeatRead(target->
bus) << 8);
164 tempRead |= (I2C_repeatRead(target->
bus));
168 tempRead = (I2C_repeatRead(target->
bus) << 8);
169 tempRead |= (I2C_repeatRead(target->
bus));
170 *container++ = (tempRead/340.0f) + 36.53f;
173 tempRead = (I2C_repeatRead(target->
bus) << 8);
174 tempRead |= (I2C_repeatRead(target->
bus));
178 tempRead = (I2C_repeatRead(target->
bus) << 8);
179 tempRead |= (I2C_repeatRead(target->
bus));
183 tempRead = (I2C_repeatRead(target->
bus) << 8);
184 I2C_stop(target->
bus);
185 tempRead |= (I2C_read(target->
bus));
191 I2C_start(target->
bus);
193 I2C_write(target->
bus,MPU6050_ADD_ACCX);
194 I2C_start(target->
bus);
198 tempRead = (I2C_repeatRead(target->
bus) << 8);
199 tempRead |= (I2C_repeatRead(target->
bus));
203 tempRead = (I2C_repeatRead(target->
bus) << 8);
204 tempRead |= (I2C_repeatRead(target->
bus));
208 tempRead = (I2C_repeatRead(target->
bus) << 8);
209 tempRead |= (I2C_repeatRead(target->
bus));
213 I2C_repeatRead(target->
bus);
214 I2C_repeatRead(target->
bus);
217 tempRead = (I2C_repeatRead(target->
bus) << 8);
218 tempRead |= (I2C_repeatRead(target->
bus));
222 tempRead = (I2C_repeatRead(target->
bus) << 8);
223 tempRead |= (I2C_repeatRead(target->
bus));
227 tempRead = (I2C_repeatRead(target->
bus) << 8);
228 I2C_stop(target->
bus);
229 tempRead |= (I2C_read(target->
bus));
272 I2C_start(target->
bus);
274 I2C_write(target->
bus,MPU6050_ADD_ACCX);
275 I2C_start(target->
bus);
277 *container = (I2C_repeatRead(target->
bus) << 8);
278 *container++ |= (I2C_repeatRead(target->
bus));
279 *container = (I2C_repeatRead(target->
bus) << 8);
280 *container++ |= (I2C_repeatRead(target->
bus));
281 *container = (I2C_repeatRead(target->
bus) << 8);
282 I2C_stop(target->
bus);
283 *container++ |= (I2C_read(target->
bus));
287 I2C_start(target->
bus);
289 I2C_write(target->
bus,MPU6050_ADD_GYRX);
290 I2C_start(target->
bus);
292 *container = (I2C_repeatRead(target->
bus) << 8);
293 *container++ |= (I2C_repeatRead(target->
bus));
294 *container = (I2C_repeatRead(target->
bus) << 8);
295 *container++ |= (I2C_repeatRead(target->
bus));
296 *container = (I2C_repeatRead(target->
bus) << 8);
297 I2C_stop(target->
bus);
298 *container++ |= (I2C_read(target->
bus));
303 I2C_start(target->
bus);
305 I2C_write(target->
bus,MPU6050_ADD_ACCX);
306 I2C_start(target->
bus);
308 *container = (I2C_repeatRead(target->
bus) << 8);
309 *container++ |= (I2C_repeatRead(target->
bus));
310 *container = (I2C_repeatRead(target->
bus) << 8);
311 *container++ |= (I2C_repeatRead(target->
bus));
312 *container = (I2C_repeatRead(target->
bus) << 8);
313 *container++ |= (I2C_repeatRead(target->
bus));
314 *container = (I2C_repeatRead(target->
bus) << 8);
315 *container++ |= (I2C_repeatRead(target->
bus));
316 *container = (I2C_repeatRead(target->
bus) << 8);
317 *container++ |= (I2C_repeatRead(target->
bus));
318 *container = (I2C_repeatRead(target->
bus) << 8);
319 *container++ |= (I2C_repeatRead(target->
bus));
320 *container = (I2C_repeatRead(target->
bus) << 8);
321 I2C_stop(target->
bus);
322 *container++ |= (I2C_read(target->
bus));
327 I2C_start(target->
bus);
329 I2C_write(target->
bus,MPU6050_ADD_ACCX);
330 I2C_start(target->
bus);
332 *container = (I2C_repeatRead(target->
bus) << 8);
333 *container++ |= (I2C_repeatRead(target->
bus));
334 *container = (I2C_repeatRead(target->
bus) << 8);
335 *container++ |= (I2C_repeatRead(target->
bus));
336 *container = (I2C_repeatRead(target->
bus) << 8);
337 *container++ |= (I2C_repeatRead(target->
bus));
340 I2C_repeatRead(target->
bus);
341 I2C_repeatRead(target->
bus);
343 *container = (I2C_repeatRead(target->
bus) << 8);
344 *container++ |= (I2C_repeatRead(target->
bus));
345 *container = (I2C_repeatRead(target->
bus) << 8);
346 *container++ |= (I2C_repeatRead(target->
bus));
347 *container = (I2C_repeatRead(target->
bus) << 8);
348 I2C_stop(target->
bus);
349 *container++ |= (I2C_read(target->
bus));
360 I2C_start(target->
bus);
362 I2C_write(target->
bus,address);
363 I2C_write(target->
bus,data);
364 I2C_stop(target->
bus);
370 I2C_start(target->
bus);
372 I2C_write(target->
bus,address);
373 I2C_start(target->
bus);
375 I2C_stop(target->
bus);
376 return I2C_read(target->
bus);
384 I2C_start(target->
bus);
386 I2C_write(target->
bus,address);
387 I2C_start(target->
bus);
389 data = (I2C_repeatRead(target->
bus) << 8);
390 I2C_stop(target->
bus);
391 return (data | I2C_read(target->
bus));
uint8_t slaveAddress
The address of the slave device.
uint8_t MPU6050_getAcc(MPU6050 *target)
Get the acceleration range.
All gyro and all accelermeter.
1000 degree range for gyroscope
void MPU6050_writeByte(MPU6050 *target, uint8_t address, uint8_t data)
Writes a single byte to a given address.
500 degree range for gyroscope
250 degree range for gyroscope
uint8_t MPU6050_readByte(MPU6050 *target, uint8_t address)
Read a single byte from a given address.
8G range for accelerometer
void MPU6050_setAcc(MPU6050 *target, mpu_acc range)
Set acceleration range.
4G range for accelerometer
uint16_t gyroSen
The gyroscope sesitivity, set during MPU6050_setup() by reading slave data register.
void MPU6050_setGyr(MPU6050 *target, mpu_gyr range)
Set gyroscope range.
16G range for accelerometer
uint16_t MPU6050_readHalf(MPU6050 *target, uint8_t address)
Read a half word from a given address.
uint8_t accelSen
The accelerometer sesitivity, set during MPU6050_setup() by reading slave data register.
Acceleration data x-axis.
uint8_t bus
The port the device is connected to.
Acceleration data y-axis.
void MPU6050_raw(MPU6050 *target, mpu_data what, int16_t *container)
Get raw data values (16-bit each)
#define MPU_DATA_RANGE
The decimal rangle of the ADC (15-bit <=> 32767).
All raw accelerometer data.
void MPU6050_calc(MPU6050 *target, mpu_data what, float *container)
Get calculated data values.
Header file for Invensence IMU MPU6050.
uint8_t MPU6050_setup(MPU6050 *target, uint8_t i2c_num, uint8_t address)
Initalizes the slave device and populates data structure variable.
Acceleration data z-axis.
mpu_data
Different options for getting data with MPU6050_raw() and MPU6050_calc()
2G range for accelerometer
Data structure containing variables specific to individual slave devices.
2000 degree range for gyroscope
uint16_t MPU6050_getGyr(MPU6050 *target)
Get the gyroscope range.