Проблема с GY-87 помогите плиз
- Войдите на сайт для отправки комментариев
Пнд, 31/08/2015 - 19:00
Есть скетчь для компенсации наклона магнитометра по акселю и героскопу. При попытке скомпилировать выдает ошибку в строке 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); }
Блин, ребята, сегодня уже третьему пишу! Какую нахрен ошибку???
Трудно скопипастить сообщение? Или нам тут надо ясновидящими быть?
Сори )))) вот ссылка со скрином https://cloud.mail.ru/public/2Te3/P5z2dcHLV
> I2Cdev.h: No such file or directory
Перевод нужен, или сам догадаешься?
Сам так же подумал....но библиотека стоит..файл есть...наверное слетела..буду искать другую...спасибо
Просто скопипастить таки религия не позволила? :)
Ну, там же ясно сказано - не нашёл компилятор файла I2Cdev.h - либо его нет в природе, либо нахрдтся не там, где должен. Какие ещё вопросы?
да вроде там
C:\Users\Антон\Documents\Arduino\libraries\I2Cdev файл I2Cdev.h
буду искать другую библиотеку
Дело Ваше - ищите, только файла он не видит. Причём не видит в инклуде из другого файла (не могу разобрать название на Вашей картинке, кажется mpu6050.h)
инклуде из другого файла---это как??? Я думал он в либах читает эти файлы
Я не знаю, что такое "либы", но Вы сообщение компилятора читали? Там же явно сказано, что из файла mpu6050.h инклюдится файл I2Cdev.h, которого нет. Посмотрите же, наконец, что там. Может надо прямые кавычки на угловые заменить, но глупо же из-за такой ерунды бежать что-то искать.
ту ошибку проскочил поменяв библиотеку но сейчас еще бутерброд-посмотрите пожалуйста https://cloud.mail.ru/public/9Ajs/Nm6aHgxYm
Простите, но больше не буду. У меня маленький экран и я там ничерта не вижу. Я Вам раз пять говорил, скопируйте текст сюда. Там в IDE даже кнопка есть "скопировать сообщение". Вот скопируйте и вставьте сюда.
Скопировал)) просто в 1.0.5 нет кнопки запустил в 1.6.4 и что интерестно там другая ошибка нежели в 1.0.5
В чём Ваш вопрос? Вам непонятны сообщения?
Да вроде понятно...1 что там не за декларировал какой то вектор...как я понял по Акселю? Откуда его брать? Просто вписать как переменную или ещё что то?
> Multiple libraries were found for "Wire.h"
Перевести, или сам догадаешься?
Типа несколько библиотек нашел одинаковых но там написано какую использует.... и вроде проблемм с ней нет...
а вот если с начала смотреть там пишет
HMC5883L_compensation_MPU6050:15: error: 'Vector' was not declared in this scope
У Вас дублируются куча библиотек - следствие Вашей привычки уть что ставить новую.
Vector - это класс. Он определён в одной из библиотек.
Добейтесь, чтобы у Вас каждой библиотеки было по одной и чтобы это были именно те, где определё класс вектор и всё остальное (короче удалите Ваши новые библиотеки и чините то, что было)
спасибо буду пытать)))
Все дубли библиотек удалил-ошибок убавилось но все равно не фурычит((((
Ну, Вы ответьте наконец - Вы текст понимаете, что Вам пишут или нет?
Ну, что тут на 24 строку она говорит, что в классе нет метода begin (а Вы его используете) и что две константы, которые Вы используете как параметры - нигде не определены. В строке 107 говорится, что в классе нет метода readScaledAccel
Откуда Вы взяли этот скетч? Это пример от библиотеки? От той, кторой Вы пользуетесь? Точно? Похоже на то, что текст от другой библиотеки.
В любом случае, методов и констант нет. Есть ли они в тексте библиотеки? Смотрите. Если есть, разбирайтесь почему их не видит компилятор (может что-нибудь хадефайнить надо, смотрите в тексте библиотеки)
скетч отсюда https://github.com/jarzebski/Arduino-HMC5883L библиотека для магнитометра есть все остальные в стоке как я понял..... ну поэксперементиую еще немного и брошу это дело)))) Спасибо Вам за помощ))
Спасибо. Проблема решена.. Всего лишь надо было снести все библиотеки..поставить сток..потом скачать библиотеки для магнитометр и героскопа от производителя скетча на GitHab и заменить на них в стоке.. После этого все заработало..компенсация есть...теперь осталось научиться как считывать датчик через определённые промежутки времени без использования задержки..чтобы скетчь не тормозило по жесткому... По можете?
Ну, я же говорил Вам, что у Вас скетч для другой библиотеки. Удачи!