LibDriver MPU6050
Loading...
Searching...
No Matches
driver_mpu6050_basic.c
Go to the documentation of this file.
1
36
38
39static mpu6050_handle_t gs_handle;
40
50{
51 uint8_t res;
52
53 /* link interface function */
62
63 /* set the addr pin */
64 res = mpu6050_set_addr_pin(&gs_handle, addr_pin);
65 if (res != 0)
66 {
67 mpu6050_interface_debug_print("mpu6050: set addr pin failed.\n");
68
69 return 1;
70 }
71
72 /* init */
73 res = mpu6050_init(&gs_handle);
74 if (res != 0)
75 {
76 mpu6050_interface_debug_print("mpu6050: init failed.\n");
77
78 return 1;
79 }
80
81 /* delay 100 ms */
83
84 /* disable sleep */
85 res = mpu6050_set_sleep(&gs_handle, MPU6050_BOOL_FALSE);
86 if (res != 0)
87 {
88 mpu6050_interface_debug_print("mpu6050: set sleep failed.\n");
89 (void)mpu6050_deinit(&gs_handle);
90
91 return 1;
92 }
93
94 /* set the default clock source */
96 if (res != 0)
97 {
98 mpu6050_interface_debug_print("mpu6050: set clock source failed.\n");
99 (void)mpu6050_deinit(&gs_handle);
100
101 return 1;
102 }
103
104 /* set the default rate */
105 res = mpu6050_set_sample_rate_divider(&gs_handle, (1000 / MPU6050_BASIC_DEFAULT_RATE) - 1);
106 if (res != 0)
107 {
108 mpu6050_interface_debug_print("mpu6050: set sample rate divider failed.\n");
109 (void)mpu6050_deinit(&gs_handle);
110
111 return 1;
112 }
113
114 /* set the default low pass filter */
116 if (res != 0)
117 {
118 mpu6050_interface_debug_print("mpu6050: set low pass filter failed.\n");
119 (void)mpu6050_deinit(&gs_handle);
120
121 return 1;
122 }
123
124 /* enable temperature sensor */
126 if (res != 0)
127 {
128 mpu6050_interface_debug_print("mpu6050: set temperature sensor failed.\n");
129 (void)mpu6050_deinit(&gs_handle);
130
131 return 1;
132 }
133
134 /* set the default cycle wake up */
136 if (res != 0)
137 {
138 mpu6050_interface_debug_print("mpu6050: set cycle wake up failed.\n");
139 (void)mpu6050_deinit(&gs_handle);
140
141 return 1;
142 }
143
144 /* set the default wake up frequency */
146 if (res != 0)
147 {
148 mpu6050_interface_debug_print("mpu6050: set wake up frequency failed.\n");
149 (void)mpu6050_deinit(&gs_handle);
150
151 return 1;
152 }
153
154 /* enable acc x */
156 if (res != 0)
157 {
158 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
159 (void)mpu6050_deinit(&gs_handle);
160
161 return 1;
162 }
163
164 /* enable acc y */
166 if (res != 0)
167 {
168 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
169 (void)mpu6050_deinit(&gs_handle);
170
171 return 1;
172 }
173
174 /* enable acc z */
176 if (res != 0)
177 {
178 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
179 (void)mpu6050_deinit(&gs_handle);
180
181 return 1;
182 }
183
184 /* enable gyro x */
186 if (res != 0)
187 {
188 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
189 (void)mpu6050_deinit(&gs_handle);
190
191 return 1;
192 }
193
194 /* enable gyro y */
196 if (res != 0)
197 {
198 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
199 (void)mpu6050_deinit(&gs_handle);
200
201 return 1;
202 }
203
204 /* enable gyro z */
206 if (res != 0)
207 {
208 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
209 (void)mpu6050_deinit(&gs_handle);
210
211 return 1;
212 }
213
214 /* disable gyroscope x test */
216 if (res != 0)
217 {
218 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
219 (void)mpu6050_deinit(&gs_handle);
220
221 return 1;
222 }
223
224 /* disable gyroscope y test */
226 if (res != 0)
227 {
228 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
229 (void)mpu6050_deinit(&gs_handle);
230
231 return 1;
232 }
233
234 /* disable gyroscope z test */
236 if (res != 0)
237 {
238 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
239 (void)mpu6050_deinit(&gs_handle);
240
241 return 1;
242 }
243
244 /* disable accelerometer x test */
246 if (res != 0)
247 {
248 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
249 (void)mpu6050_deinit(&gs_handle);
250
251 return 1;
252 }
253
254 /* disable accelerometer y test */
256 if (res != 0)
257 {
258 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
259 (void)mpu6050_deinit(&gs_handle);
260
261 return 1;
262 }
263
264 /* disable accelerometer z test */
266 if (res != 0)
267 {
268 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
269 (void)mpu6050_deinit(&gs_handle);
270
271 return 1;
272 }
273
274 /* disable fifo */
275 res = mpu6050_set_fifo(&gs_handle, MPU6050_BOOL_FALSE);
276 if (res != 0)
277 {
278 mpu6050_interface_debug_print("mpu6050: set fifo failed.\n");
279 (void)mpu6050_deinit(&gs_handle);
280
281 return 1;
282 }
283
284 /* disable temp fifo */
286 if (res != 0)
287 {
288 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
289 (void)mpu6050_deinit(&gs_handle);
290
291 return 1;
292 }
293
294 /* disable xg fifo */
296 if (res != 0)
297 {
298 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
299 (void)mpu6050_deinit(&gs_handle);
300
301 return 1;
302 }
303
304 /* disable yg fifo */
306 if (res != 0)
307 {
308 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
309 (void)mpu6050_deinit(&gs_handle);
310
311 return 1;
312 }
313
314 /* disable zg fifo */
316 if (res != 0)
317 {
318 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
319 (void)mpu6050_deinit(&gs_handle);
320
321 return 1;
322 }
323
324 /* disable accel fifo */
326 if (res != 0)
327 {
328 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
329 (void)mpu6050_deinit(&gs_handle);
330
331 return 1;
332 }
333
334 /* set the default interrupt level */
336 if (res != 0)
337 {
338 mpu6050_interface_debug_print("mpu6050: set interrupt level failed.\n");
339 (void)mpu6050_deinit(&gs_handle);
340
341 return 1;
342 }
343
344 /* set the default pin type */
346 if (res != 0)
347 {
348 mpu6050_interface_debug_print("mpu6050: set interrupt pin type failed.\n");
349 (void)mpu6050_deinit(&gs_handle);
350
351 return 1;
352 }
353
354 /* set the default motion interrupt */
356 if (res != 0)
357 {
358 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
359 (void)mpu6050_deinit(&gs_handle);
360
361 return 1;
362 }
363
364 /* set the default fifo overflow interrupt */
366 if (res != 0)
367 {
368 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
369 (void)mpu6050_deinit(&gs_handle);
370
371 return 1;
372 }
373
374 /* set the default dmp interrupt */
376 if (res != 0)
377 {
378 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
379 (void)mpu6050_deinit(&gs_handle);
380
381 return 1;
382 }
383
384 /* set the default i2c master interrupt */
386 if (res != 0)
387 {
388 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
389 (void)mpu6050_deinit(&gs_handle);
390
391 return 1;
392 }
393
394 /* set the default data ready interrupt */
396 if (res != 0)
397 {
398 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
399 (void)mpu6050_deinit(&gs_handle);
400
401 return 1;
402 }
403
404 /* set the default interrupt latch */
406 if (res != 0)
407 {
408 mpu6050_interface_debug_print("mpu6050: set interrupt latch failed.\n");
409 (void)mpu6050_deinit(&gs_handle);
410
411 return 1;
412 }
413
414 /* set the default interrupt read clear */
416 if (res != 0)
417 {
418 mpu6050_interface_debug_print("mpu6050: set interrupt read clear failed.\n");
419 (void)mpu6050_deinit(&gs_handle);
420
421 return 1;
422 }
423
424 /* set the extern sync */
426 if (res != 0)
427 {
428 mpu6050_interface_debug_print("mpu6050: set extern sync failed.\n");
429 (void)mpu6050_deinit(&gs_handle);
430
431 return 1;
432 }
433
434 /* set the default fsync interrupt */
436 if (res != 0)
437 {
438 mpu6050_interface_debug_print("mpu6050: set fsync interrupt failed.\n");
439 (void)mpu6050_deinit(&gs_handle);
440
441 return 1;
442 }
443
444 /* set the default fsync interrupt level */
446 if (res != 0)
447 {
448 mpu6050_interface_debug_print("mpu6050: set fsync interrupt level failed.\n");
449 (void)mpu6050_deinit(&gs_handle);
450
451 return 1;
452 }
453
454 /* set the default iic master */
456 if (res != 0)
457 {
458 mpu6050_interface_debug_print("mpu6050: set iic master failed.\n");
459 (void)mpu6050_deinit(&gs_handle);
460
461 return 1;
462 }
463
464 /* set the default iic bypass */
466 if (res != 0)
467 {
468 mpu6050_interface_debug_print("mpu6050: set iic bypass failed.\n");
469 (void)mpu6050_deinit(&gs_handle);
470
471 return 1;
472 }
473
474 /* set the default accelerometer range */
476 if (res != 0)
477 {
478 mpu6050_interface_debug_print("mpu6050: set accelerometer range failed.\n");
479 (void)mpu6050_deinit(&gs_handle);
480
481 return 1;
482 }
483
484 /* set the default gyroscope range */
486 if (res != 0)
487 {
488 mpu6050_interface_debug_print("mpu6050: set gyroscope range failed.\n");
489 (void)mpu6050_deinit(&gs_handle);
490
491 return 1;
492 }
493
494 return 0;
495}
496
505uint8_t mpu6050_basic_read_temperature(float *degrees)
506{
507 int16_t raw;
508
509 /* read temperature */
510 if (mpu6050_read_temperature(&gs_handle, &raw, degrees) != 0)
511 {
512 return 1;
513 }
514
515 return 0;
516}
517
527uint8_t mpu6050_basic_read(float g[3], float dps[3])
528{
529 uint16_t len;
530 int16_t accel_raw[3];
531 int16_t gyro_raw[3];
532 float accel[3];
533 float gyro[3];
534
535 /* set 1 */
536 len = 1;
537
538 /* read data */
539 if (mpu6050_read(&gs_handle,
540 (int16_t (*)[3])&accel_raw, (float (*)[3])&accel,
541 (int16_t (*)[3])&gyro_raw, (float (*)[3])&gyro,
542 &len) != 0
543 )
544 {
545 return 1;
546 }
547
548 /* copy the data */
549 g[0] = accel[0];
550 g[1] = accel[1];
551 g[2] = accel[2];
552 dps[0] = gyro[0];
553 dps[1] = gyro[1];
554 dps[2] = gyro[2];
555
556 return 0;
557}
558
567{
568 /* deinit */
569 if (mpu6050_deinit(&gs_handle) != 0)
570 {
571 return 1;
572 }
573
574 return 0;
575}
driver mpu6050 basic header file
uint8_t mpu6050_set_wake_up_frequency(mpu6050_handle_t *handle, mpu6050_wake_up_frequency_t frequency)
set the wake up frequency
uint8_t mpu6050_init(mpu6050_handle_t *handle)
initialize the chip
uint8_t mpu6050_read_temperature(mpu6050_handle_t *handle, int16_t(*raw), float *degrees)
read the temperature
uint8_t mpu6050_set_accelerometer_range(mpu6050_handle_t *handle, mpu6050_accelerometer_range_t range)
set the accelerometer range
mpu6050_address_t
mpu6050 address enumeration definition
uint8_t mpu6050_set_standby_mode(mpu6050_handle_t *handle, mpu6050_source_t source, mpu6050_bool_t enable)
set source into standby mode
uint8_t mpu6050_set_sample_rate_divider(mpu6050_handle_t *handle, uint8_t d)
set the sample rate divider
uint8_t mpu6050_set_gyroscope_range(mpu6050_handle_t *handle, mpu6050_gyroscope_range_t range)
set the gyroscope range
uint8_t mpu6050_set_addr_pin(mpu6050_handle_t *handle, mpu6050_address_t addr_pin)
set the chip address pin
uint8_t mpu6050_set_interrupt_read_clear(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the interrupt reading clear
uint8_t mpu6050_read(mpu6050_handle_t *handle, int16_t(*accel_raw)[3], float(*accel_g)[3], int16_t(*gyro_raw)[3], float(*gyro_dps)[3], uint16_t *len)
read the data
uint8_t mpu6050_set_fifo_enable(mpu6050_handle_t *handle, mpu6050_fifo_t fifo, mpu6050_bool_t enable)
enable or disable the fifo function
uint8_t mpu6050_set_interrupt(mpu6050_handle_t *handle, mpu6050_interrupt_t type, mpu6050_bool_t enable)
enable or disable the interrupt
uint8_t mpu6050_set_iic_bypass(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the iic bypass
uint8_t mpu6050_set_gyroscope_test(mpu6050_handle_t *handle, mpu6050_axis_t axis, mpu6050_bool_t enable)
set the gyroscope test
uint8_t mpu6050_set_cycle_wake_up(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the cycle wake up mode
uint8_t mpu6050_set_interrupt_pin_type(mpu6050_handle_t *handle, mpu6050_pin_type_t type)
set the interrupt pin type
uint8_t mpu6050_set_iic_master(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the iic master mode
uint8_t mpu6050_set_temperature_sensor(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the temperature sensor
uint8_t mpu6050_set_interrupt_latch(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the interrupt latch
uint8_t mpu6050_set_accelerometer_test(mpu6050_handle_t *handle, mpu6050_axis_t axis, mpu6050_bool_t enable)
set the accelerometer test
uint8_t mpu6050_set_extern_sync(mpu6050_handle_t *handle, mpu6050_extern_sync_t sync)
set the extern sync type
uint8_t mpu6050_set_sleep(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the sleep mode
struct mpu6050_handle_s mpu6050_handle_t
mpu6050 handle structure definition
uint8_t mpu6050_set_fifo(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable fifo
uint8_t mpu6050_set_interrupt_level(mpu6050_handle_t *handle, mpu6050_pin_level_t level)
set the interrupt level
uint8_t mpu6050_set_clock_source(mpu6050_handle_t *handle, mpu6050_clock_source_t clock_source)
set the chip clock source
uint8_t mpu6050_set_fsync_interrupt(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the fsync interrupt
uint8_t mpu6050_set_low_pass_filter(mpu6050_handle_t *handle, mpu6050_low_pass_filter_t filter)
set the low pass filter
uint8_t mpu6050_deinit(mpu6050_handle_t *handle)
close the chip
uint8_t mpu6050_set_fsync_interrupt_level(mpu6050_handle_t *handle, mpu6050_pin_level_t level)
set the fsync interrupt level
@ MPU6050_SOURCE_ACC_Y
@ MPU6050_SOURCE_GYRO_Y
@ MPU6050_SOURCE_ACC_Z
@ MPU6050_SOURCE_ACC_X
@ MPU6050_SOURCE_GYRO_Z
@ MPU6050_SOURCE_GYRO_X
@ MPU6050_FIFO_XG
@ MPU6050_FIFO_ACCEL
@ MPU6050_FIFO_TEMP
@ MPU6050_FIFO_ZG
@ MPU6050_FIFO_YG
@ MPU6050_INTERRUPT_DMP
@ MPU6050_INTERRUPT_I2C_MAST
@ MPU6050_INTERRUPT_DATA_READY
@ MPU6050_INTERRUPT_FIFO_OVERFLOW
@ MPU6050_INTERRUPT_MOTION
@ MPU6050_BOOL_TRUE
@ MPU6050_BOOL_FALSE
@ MPU6050_AXIS_X
@ MPU6050_AXIS_Z
@ MPU6050_AXIS_Y
#define MPU6050_BASIC_DEFAULT_INTERRUPT_LATCH
uint8_t mpu6050_basic_deinit(void)
basic example deinit
#define MPU6050_BASIC_DEFAULT_IIC_BYPASS
uint8_t mpu6050_basic_read_temperature(float *degrees)
basic example read temperature
#define MPU6050_BASIC_DEFAULT_INTERRUPT_DATA_READY
uint8_t mpu6050_basic_init(mpu6050_address_t addr_pin)
basic example init
#define MPU6050_BASIC_DEFAULT_INTERRUPT_DMP
#define MPU6050_BASIC_DEFAULT_GYROSCOPE_RANGE
#define MPU6050_BASIC_DEFAULT_CLOCK_SOURCE
mpu6050 basic example default definition
#define MPU6050_BASIC_DEFAULT_IIC_MASTER
#define MPU6050_BASIC_DEFAULT_FSYNC_INTERRUPT_LEVEL
#define MPU6050_BASIC_DEFAULT_LOW_PASS_FILTER
#define MPU6050_BASIC_DEFAULT_INTERRUPT_MOTION
#define MPU6050_BASIC_DEFAULT_INTERRUPT_PIN_LEVEL
#define MPU6050_BASIC_DEFAULT_INTERRUPT_READ_CLEAR
#define MPU6050_BASIC_DEFAULT_EXTERN_SYNC
uint8_t mpu6050_basic_read(float g[3], float dps[3])
basic example read
#define MPU6050_BASIC_DEFAULT_ACCELEROMETER_RANGE
#define MPU6050_BASIC_DEFAULT_INTERRUPT_FIFO_OVERFLOW
#define MPU6050_BASIC_DEFAULT_CYCLE_WAKE_UP
#define MPU6050_BASIC_DEFAULT_INTERRUPT_I2C_MAST
#define MPU6050_BASIC_DEFAULT_INTERRUPT_PIN_TYPE
#define MPU6050_BASIC_DEFAULT_WAKE_UP_FREQUENCY
#define MPU6050_BASIC_DEFAULT_FSYNC_INTERRUPT
#define MPU6050_BASIC_DEFAULT_RATE
uint8_t mpu6050_interface_iic_deinit(void)
interface iic bus deinit
uint8_t mpu6050_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void mpu6050_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t mpu6050_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t mpu6050_interface_iic_init(void)
interface iic bus init
void mpu6050_interface_receive_callback(uint8_t type)
interface receive callback
void mpu6050_interface_delay_ms(uint32_t ms)
interface delay ms