Настройка MPU6050
- Войдите на сайт для отправки комментариев
Пнд, 15/06/2020 - 20:21
Использую код.
#include "MPU6050.h" #include "I2Cdev.h" #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif double gyroXangle, gyroYangle; int16_t acx, acy, acz, gix, giy, giz; MPU6050 accel; long portspeed = 19200; #define T_OUT 20 unsigned long ti; void setup(void) { RS485.begin(portspeed); pinMode(ENABLE_PIN, OUTPUT); accel.initialize(); } void loop() { ti = millis(); if ( t_next < ti ) { t_next = ti + T_OUT; accel.getAcceleration(&acx, &acy, &acz); //Расчет угла gyroXangle = (180 / 3.141592) * atan(acx / sqrt(pow(acy, 2) + pow(acz, 2))); gyroYangle = (180 / 3.141592) * atan(acy / sqrt(pow(acx, 2) + pow(acz, 2))); }
Программируемый пользователем диапазон измерений: ±2, ±4, ±8 и ±16 g, По умолчанию вроде стоит 8g.
Вопрос: Как установить параметр 2g или 16g? По библиотеке MPU6050.h не нашел документацию как это сделать.
А искал? Правда? Видел там в коде библиотеки функцию setFullScaleAccelRange, читал её описание в комментариях, и так и не понял как это делается?
Ну, тогда, даже не знаю ... попробуйте ещё раз поискать.
Ну, тогда, даже не знаю ... попробуйте ещё раз поискать.
Нашел в файле MPU6050.cpp строка 379, я искал в примерах и документации не думал что придется исходник разбирать.
Тогда вопрос: что бы установить параметр 16g надо setFullScaleAccelRange(0x10) ?
Тогда вопрос: что бы установить параметр 16g надо setFullScaleAccelRange(0x10) ?
Зачем? Вполне хватит setFullScaleAccelRange(16)
Тогда вопрос: что бы установить параметр 16g надо setFullScaleAccelRange(0x10) ?
Рустам, Вы издеваетесь? Или Вы название нашли, а описание не прочитали? Может, таки прочитаете? Там ведь ясно написано, что насчёт параметров "@see getFullScaleAccelRange()", а в той в свою очередь, перечислены все возможные ускорения и правильные параметры для них.
В конце концов в .h файле (том самом на который Вы ссылались) тупо определены константы - MPU6050_ACCEL_FS_2, MPU6050_ACCEL_FS_4, MPU6050_ACCEL_FS_8, MPU6050_ACCEL_FS_16. Вот их, блин, и используйте!
Зачем? Вполне хватит setFullScaleAccelRange(16)
Ну, не глядя-то не говорите. Там вовсе не 16 надо.
Рустам, Вы издеваетесь? Или Вы название нашли, а описание не прочитали? Может, таки прочитаете? Там ведь ясно написано, что насчёт параметров "@see getFullScaleAccelRange()", а в той в свою очередь, перечислены все возможные ускорения и правильные параметры для них.
В конце концов в .h файле (том самом на который Вы ссылались) тупо определены константы - MPU6050_ACCEL_FS_2, MPU6050_ACCEL_FS_4, MPU6050_ACCEL_FS_8, MPU6050_ACCEL_FS_16. Вот их, блин, и используйте!
Я опирался на тип переменной uint8_t в итоге константа должна иметь значения 0x02 0x04 0x08 0x10
void MPU6050::setFullScaleAccelRange(uint8_t range)
#define MPU6050_ACCEL_FS_2 0x00
#define MPU6050_ACCEL_FS_4 0x01
#define MPU6050_ACCEL_FS_8 0x02
#define MPU6050_ACCEL_FS_16 0x03
Я ошибся
Для 16g = 0x03
[РЕШЕНО]
#define MPU6050_ACCEL_FS_2 0x00
#define MPU6050_ACCEL_FS_4 0x01
#define MPU6050_ACCEL_FS_8 0x02
#define MPU6050_ACCEL_FS_16 0x03
Я ошибся
Для 16g = 0x03
[РЕШЕНО]
Рустам, для вас автор библиотеки специально сделал понятные дефайны, чтобы не нужно было задавать в коде левые цифры.
Правильно писать вот так:
это будет по смыслу тоже самое как 0x03, но код получится куда как понятнее