Настройка MPU6050

rustam
Offline
Зарегистрирован: 25.01.2015

Использую код. 

#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 не нашел документацию как это сделать.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

rustam пишет:
Вопрос: Как установить параметр 2g или 16g? По библиотеке MPU6050.h не нашел документацию как это сделать.

А искал? Правда? Видел там в коде библиотеки функцию setFullScaleAccelRange, читал её описание в комментариях, и так и не понял как это делается?

Ну, тогда, даже не знаю ... попробуйте ещё раз поискать.

rustam
Offline
Зарегистрирован: 25.01.2015

ЕвгенийП пишет:

Ну, тогда, даже не знаю ... попробуйте ещё раз поискать.

Нашел в файле MPU6050.cpp строка 379, я искал в примерах и документации не думал что придется исходник разбирать.

Тогда вопрос: что бы установить параметр 16g надо setFullScaleAccelRange(0x10) ?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

rustam пишет:

Тогда вопрос: что бы установить параметр 16g надо setFullScaleAccelRange(0x10) ?

Зачем? Вполне хватит setFullScaleAccelRange(16)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

rustam пишет:

Тогда вопрос: что бы установить параметр 16g надо setFullScaleAccelRange(0x10) ?

Рустам, Вы издеваетесь? Или Вы название нашли, а описание не прочитали? Может, таки прочитаете? Там ведь ясно написано, что насчёт параметров "@see getFullScaleAccelRange()", а в той в свою очередь, перечислены все возможные ускорения и правильные параметры для них.

В конце концов в .h файле (том самом на который Вы ссылались) тупо определены константы - MPU6050_ACCEL_FS_2, MPU6050_ACCEL_FS_4, MPU6050_ACCEL_FS_8, MPU6050_ACCEL_FS_16. Вот их, блин, и используйте!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mykaida пишет:

Зачем? Вполне хватит setFullScaleAccelRange(16)


Ну, не глядя-то не говорите. Там вовсе не 16 надо.

rustam
Offline
Зарегистрирован: 25.01.2015

ЕвгенийП пишет:

Рустам, Вы издеваетесь? Или Вы название нашли, а описание не прочитали? Может, таки прочитаете? Там ведь ясно написано, что насчёт параметров "@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)

rustam
Offline
Зарегистрирован: 25.01.2015

#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

[РЕШЕНО]

b707
Offline
Зарегистрирован: 26.05.2017

rustam пишет:

#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

[РЕШЕНО]

Рустам, для вас автор библиотеки специально сделал понятные дефайны, чтобы не нужно было задавать в коде левые цифры.

Правильно писать вот так:

setFullScaleAccelRange(MPU6050_ACCEL_FS_16)

это будет по смыслу тоже самое как 0x03, но код получится куда как понятнее