Проблема с GY-87 помогите плиз

ToxaRU
Offline
Зарегистрирован: 03.04.2015

Есть скетчь для компенсации наклона магнитометра по акселю и героскопу. При попытке скомпилировать выдает ошибку в строке while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) Что не так?  

/*
  Tilt compensated HMC5883L + MPU6050 (GY-86 / GY-87). Output for HMC5883L_compensation_processing.pde
  Read more: http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-magnetometr-...
  GIT: https://github.com/jarzebski/Arduino-HMC5883L
  Web: http://www.jarzebski.pl
  (c) 2014 by Korneliusz Jarzebski
*/

#include <Wire.h>
#include <HMC5883L.h>
#include <MPU6050.h>

HMC5883L compass;
MPU6050 mpu;

float heading1;
float heading2;

void setup()
{
  Serial.begin(9600);

  // Initialize MPU6050
  while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    delay(500);
  }

  // Enable bypass mode
  mpu.setI2CMasterModeEnabled(false);
  mpu.setI2CBypassEnabled(true) ;
  mpu.setSleepEnabled(false);

  // Initialize Initialize HMC5883L
  while (!compass.begin())
  {
    delay(500);
  }

  // Set measurement range
  compass.setRange(HMC5883L_RANGE_1_3GA);

  // Set measurement mode
  compass.setMeasurementMode(HMC5883L_CONTINOUS);

  // Set data rate
  compass.setDataRate(HMC5883L_DATARATE_30HZ);

  // Set number of samples averaged
  compass.setSamples(HMC5883L_SAMPLES_8);

  // Set calibration offset. See HMC5883L_calibration.ino
  compass.setOffset(0, 0);
}

// No tilt compensation
float noTiltCompensate(Vector mag)
{
  float heading = atan2(mag.YAxis, mag.XAxis);
  return heading;
}
// Tilt compensation
float tiltCompensate(Vector mag, Vector normAccel)
{
  // Pitch & Roll
 
  float roll;
  float pitch;
 
  roll = asin(normAccel.YAxis);
  pitch = asin(-normAccel.XAxis);

  if (roll > 0.78 || roll < -0.78 || pitch > 0.78 || pitch < -0.78)
  {
    return -1000;
  }
 
    // Some of these are used twice, so rather than computing them twice in the algorithem we precompute them before hand.
  float cosRoll = cos(roll);
  float sinRoll = sin(roll); 
  float cosPitch = cos(pitch);
  float sinPitch = sin(pitch);
 
  // Tilt compensation
  float Xh = mag.XAxis * cosPitch + mag.ZAxis * sinPitch;
  float Yh = mag.XAxis * sinRoll * sinPitch + mag.YAxis * cosRoll - mag.ZAxis * sinRoll * cosPitch;
  float heading = atan2(Yh, Xh);
   
  return heading;
}

// Correct angle
float correctAngle(float heading)
{
  if (heading < 0) { heading += 2 * PI; }
  if (heading > 2 * PI) { heading -= 2 * PI; }

  return heading;
}

void loop()
{
  // Read vectors
  Vector mag = compass.readNormalize();
  Vector acc = mpu.readScaledAccel(); 

  // Calculate headings
  heading1 = noTiltCompensate(mag);
  heading2 = tiltCompensate(mag, acc);
 
  if (heading2 == -1000)
  {
    heading2 = heading1;
  }

  // Set declination angle on your location and fix heading
  // You can find your declination on: http://magnetic-declination.com/
  // (+) Positive or (-) for negative
  // For Bytom / Poland declination angle is 4'26E (positive)
  // Formula: (deg + (min / 60.0)) / (180 / M_PI);
  float declinationAngle = (4.0 + (26.0 / 60.0)) / (180 / M_PI);
  heading1 += declinationAngle;
  heading2 += declinationAngle;
 
  // Correct for heading < 0deg and heading > 360deg
  heading1 = correctAngle(heading1);
  heading2 = correctAngle(heading2);

  // Convert to degrees
  heading1 = heading1 * 180/M_PI;
  heading2 = heading2 * 180/M_PI;

  // Output
  Serial.print(heading1);
  Serial.print(":");
  Serial.println(heading2);

  delay(100);
}

 

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

Блин, ребята, сегодня уже третьему пишуКакую нахрен ошибку??? 

Трудно скопипастить сообщение? Или нам тут надо ясновидящими быть?

ToxaRU
Offline
Зарегистрирован: 03.04.2015

Сори )))) вот ссылка со скрином  https://cloud.mail.ru/public/2Te3/P5z2dcHLV

Radjah
Offline
Зарегистрирован: 06.08.2014

> I2Cdev.h: No such file or directory

Перевод нужен, или сам догадаешься?

ToxaRU
Offline
Зарегистрирован: 03.04.2015

Сам так же подумал....но библиотека стоит..файл есть...наверное слетела..буду искать другую...спасибо

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

Просто скопипастить таки религия не позволила? :)

Ну, там же ясно сказано - не нашёл компилятор файла I2Cdev.h - либо его нет в природе, либо нахрдтся не там, где должен. Какие ещё вопросы?

ToxaRU
Offline
Зарегистрирован: 03.04.2015

да вроде там

C:\Users\Антон\Documents\Arduino\libraries\I2Cdev      файл I2Cdev.h  

буду искать другую библиотеку

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

Дело Ваше - ищите, только файла он не видит. Причём не видит в инклуде из другого файла (не могу разобрать название на Вашей картинке, кажется mpu6050.h)

ToxaRU
Offline
Зарегистрирован: 03.04.2015

инклуде из другого файла---это как???   Я думал он в либах читает эти файлы

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

Я не знаю, что такое "либы", но Вы сообщение компилятора читали? Там же явно сказано, что из файла mpu6050.h инклюдится файл  I2Cdev.h, которого нет. Посмотрите же, наконец, что там. Может надо прямые кавычки на угловые заменить, но глупо же из-за такой ерунды бежать что-то искать.

ToxaRU
Offline
Зарегистрирован: 03.04.2015

ту ошибку проскочил поменяв библиотеку  но сейчас еще бутерброд-посмотрите пожалуйста    https://cloud.mail.ru/public/9Ajs/Nm6aHgxYm

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

Простите, но больше не буду. У меня маленький экран и я там ничерта не вижу. Я Вам раз пять говорил, скопируйте текст сюда. Там в IDE даже кнопка есть "скопировать сообщение". Вот скопируйте и вставьте сюда.

ToxaRU
Offline
Зарегистрирован: 03.04.2015

Скопировал)) просто в 1.0.5 нет кнопки запустил в 1.6.4 и что интерестно там другая ошибка нежели в 1.0.5

 

Arduino: 1.6.4 (Windows 7), Плата"Arduino Leonardo"
 
Изменена опция сборки, пересобираем все
 
HMC5883L_compensation_MPU6050:15: error: 'Vector' was not declared in this scope
HMC5883L_compensation_MPU6050:16: error: 'Vector' was not declared in this scope
HMC5883L_compensation_MPU6050:16: error: 'Vector' was not declared in this scope
HMC5883L_compensation_MPU6050:16: error: expression list treated as compound expression in initializer [-fpermissive]
HMC5883L_compensation_MPU6050.ino: In function 'void setup()':
HMC5883L_compensation_MPU6050:24: error: 'class MPU6050' has no member named 'begin'
HMC5883L_compensation_MPU6050:24: error: 'MPU6050_SCALE_2000DPS' was not declared in this scope
HMC5883L_compensation_MPU6050:24: error: 'MPU6050_RANGE_2G' was not declared in this scope
HMC5883L_compensation_MPU6050:35: error: 'class HMC5883L' has no member named 'begin'
HMC5883L_compensation_MPU6050:41: error: 'class HMC5883L' has no member named 'setRange'
HMC5883L_compensation_MPU6050:41: error: 'HMC5883L_RANGE_1_3GA' was not declared in this scope
HMC5883L_compensation_MPU6050:44: error: 'class HMC5883L' has no member named 'setMeasurementMode'
HMC5883L_compensation_MPU6050:44: error: 'HMC5883L_CONTINOUS' was not declared in this scope
HMC5883L_compensation_MPU6050:47: error: 'HMC5883L_DATARATE_30HZ' was not declared in this scope
HMC5883L_compensation_MPU6050:50: error: 'class HMC5883L' has no member named 'setSamples'
HMC5883L_compensation_MPU6050:50: error: 'HMC5883L_SAMPLES_8' was not declared in this scope
HMC5883L_compensation_MPU6050:53: error: 'class HMC5883L' has no member named 'setOffset'
HMC5883L_compensation_MPU6050.ino: At global scope:
HMC5883L_compensation_MPU6050:57: error: redefinition of 'float noTiltCompensate'
HMC5883L_compensation_MPU6050:15: error: 'float noTiltCompensate' previously defined here
HMC5883L_compensation_MPU6050:57: error: 'Vector' was not declared in this scope
HMC5883L_compensation_MPU6050:64: error: redefinition of 'float tiltCompensate'
HMC5883L_compensation_MPU6050:16: error: 'float tiltCompensate' previously defined here
HMC5883L_compensation_MPU6050:64: error: 'Vector' was not declared in this scope
HMC5883L_compensation_MPU6050:64: error: 'Vector' was not declared in this scope
Multiple libraries were found for "Wire.h"
 
 Used: C:\Users\Антон\Documents\Arduino\libraries\Wire
 
 Not used: C:\Users\Антон\Desktop\arduino\arduino-1.6.4\hardware\arduino\avr\libraries\Wire
 
Multiple libraries were found for "HMC5883L.h"
 
 Used: C:\Users\Антон\Documents\Arduino\libraries\HMC5883L
 
 Not used: C:\Users\Антон\Documents\Arduino\libraries\HMC5883L1
 
 Not used: C:\Users\Антон\Desktop\arduino\arduino-1.6.4\libraries\HMC5883L
 
 Not used: C:\Users\Антон\Desktop\arduino\arduino-1.6.4\libraries\HMC5883L1
 
Multiple libraries were found for "MPU6050.h"
 
 Used: C:\Users\Антон\Documents\Arduino\libraries\MPU6050
 
 Not used: C:\Users\Антон\Desktop\arduino\arduino-1.6.4\libraries\MPU6050
 
'Vector' was not declared in this scope
 
  Это сообщение будет содержать больше информации чем
  "Отображать вывод во время компиляции"
  включено в Файл > Настройки
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В чём Ваш вопрос? Вам непонятны сообщения?

ToxaRU
Offline
Зарегистрирован: 03.04.2015

Да вроде понятно...1 что там не за декларировал какой то вектор...как я понял по Акселю? Откуда его брать? Просто вписать как переменную или ещё что то?

Radjah
Offline
Зарегистрирован: 06.08.2014

> Multiple libraries were found for "Wire.h"

Перевести, или сам догадаешься?

ToxaRU
Offline
Зарегистрирован: 03.04.2015

Типа несколько библиотек нашел одинаковых но там написано какую использует.... и вроде проблемм с ней нет...

а вот если с начала смотреть там пишет

 HMC5883L_compensation_MPU6050:15: error: 'Vector' was not declared in this scope

HMC5883L_compensation_MPU6050:15: error: 'Vector' was not declared in this scope
 
ниже там тоже что то незадекларировано.... че то я непойму ничего написано типа готовый скетчь-а нифига не работает(((((((  надо искать что нить подобне но  рабочее а то у меня моя игрушка не работает-чуть магнитометр в наклон и данные поплыли(((((
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

У Вас дублируются куча библиотек - следствие Вашей привычки уть что ставить новую.

Vector - это класс. Он определён в одной из библиотек.

Добейтесь, чтобы у Вас каждой библиотеки было по одной и чтобы это были именно те, где определё класс вектор и всё остальное (короче удалите Ваши новые библиотеки и чините то, что было)

ToxaRU
Offline
Зарегистрирован: 03.04.2015

спасибо   буду пытать)))

ToxaRU
Offline
Зарегистрирован: 03.04.2015

Все дубли библиотек удалил-ошибок убавилось но все равно не фурычит((((

 
Arduino: 1.6.4 (Windows 7), Плата"Arduino Nano, ATmega328"
 
HMC5883L_compensation_MPU6050.ino: In function 'void setup()':
HMC5883L_compensation_MPU6050:24: error: 'class MPU6050' has no member named 'begin'
HMC5883L_compensation_MPU6050:24: error: 'MPU6050_SCALE_2000DPS' was not declared in this scope
HMC5883L_compensation_MPU6050:24: error: 'MPU6050_RANGE_2G' was not declared in this scope
HMC5883L_compensation_MPU6050.ino: In function 'void loop()':
HMC5883L_compensation_MPU6050:107: error: 'class MPU6050' has no member named 'readScaledAccel'
'class MPU6050' has no member named 'begin'
 
  Это сообщение будет содержать больше информации чем
  "Отображать вывод во время компиляции"
  включено в Файл > Настройки
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, Вы ответьте наконец - Вы текст понимаете, что Вам пишут или нет?

Ну, что тут на 24 строку она говорит, что в классе нет метода begin (а Вы его используете) и что две константы, которые Вы используете как параметры - нигде не определены. В строке 107 говорится, что в классе нет метода readScaledAccel

Откуда Вы взяли этот скетч? Это пример от библиотеки? От той, кторой Вы пользуетесь? Точно? Похоже на то, что текст от другой библиотеки.

В любом случае, методов и констант нет. Есть ли они в тексте библиотеки? Смотрите. Если есть, разбирайтесь почему их не видит компилятор (может что-нибудь хадефайнить надо, смотрите в тексте библиотеки)

ToxaRU
Offline
Зарегистрирован: 03.04.2015

скетч отсюда https://github.com/jarzebski/Arduino-HMC5883L  библиотека для магнитометра есть все остальные в стоке как я понял..... ну поэксперементиую еще немного и брошу это дело))))  Спасибо Вам  за помощ))

ToxaRU
Offline
Зарегистрирован: 03.04.2015

Спасибо. Проблема решена.. Всего лишь надо было снести все библиотеки..поставить сток..потом скачать библиотеки для магнитометр и героскопа от производителя скетча на GitHab и заменить на них в стоке.. После этого все заработало..компенсация есть...теперь осталось научиться как считывать датчик через определённые промежутки времени без использования задержки..чтобы скетчь не тормозило по жесткому... По можете?

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

Ну, я же говорил Вам, что у Вас скетч для другой библиотеки. Удачи!