Здравствуйте, уважаемые знатоки!
Использую i2cdevlib, чтобы упростить "общение" с гироскопом и акселерометром MPU6050.
Их пример скомпилировался и работает без особых проблем:
Я просто скопировал нужные файлы в папку к проекту, сам проект взял из примеров и все заработало.
Вот проект
Сам датчик, очевидно, не нужен, чтобы собрать и залить в Ардуину.
А вот обернуть всю работу с MPU6050 в отдельный класс, который скрыл бы всю инициализацию и т.п. не получилось.
Для этого создал Sensor.cpp и Sensor.h. Из Sensor.h подключил заголовки для работы с MPU6050, как это было раньше сделано в основном проекте.
В основном проекте убрал все, заинклудил там Sensor.h
И понеслись ошибки:
testMPU.cpp.o: In function `MPU6050::dmpGetAccel(long*, unsigned char const*)':
/MPU6050_6Axis_MotionApps20.h:533: multiple definition of `MPU6050::dmpGetAccel(long*, unsigned char const*)'
sensor.cpp.o:/MPU6050_6Axis_MotionApps20.h:533: first defined here
Код файла проекта://всякие дефайны
#include "Wire.h"
#include "sensor.h"
void setup() {
Sensor::getInstance().init();
}
void loop() {
float y,p,r;
Sensor::getInstance().getYpr(y,p,r);
}
Код sensor.h:#ifndef SENSOR_H
#define SENSOR_H
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
//#include "MPU6050.h" // not necessary if using MotionApps include file
// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
class Sensor{
public:
static Sensor & getInstance(){
static Sensor instance;
return instance;
}
bool init();
bool getYpr(float & y, float & p, float r);
protected:
MPU6050 _mpu;
..............
Вот сам несобирающийся проект вместе с файлами i2cdevlib
Спасибо всем, кто дочитал до конца.