Hallo MaFu,
ich möchte mein Projekt in 4 Module aufteilen.
Center-> hier läuft alles zusammen
Sensor -> wie der Name schon sagt, u.a. MPU6050
Motor -> Regel- Steuerung der Motoren
Command -> Bedienung per Bluetooth und CMDMessenger
Über Allem schwebt die *.ino
Nun versuche ich seit geraumer Zeit, die MPU6050 Lib in das Sensormodul zu implementieren.
Versuch 1. Quadxx.ino -> Center -> Sensor ohne Erfolg.
Versuch2 . Quadxx.ino -> Sensor ohne Erfolg.
Was ich auch versuche, die Fehlermeldung lt. immer annähernd gleich:
Compiling 'Quad08' for 'Arduino Mega 2560 or Mega ADK'
Sensor.cpp.o : : In function MPU6050::dmpGetAccel(long*, unsigned char const*)': MPU6050_9Axis_MotionApps41.h : dmpGetAccel(long*, unsigned char const*)' Quad08.cpp.o : :D:\NotInstalled\arduino104\libraries\MPU6050\MPU6050_9Axis_MotionApps41.h:636: first defined here ld.exe : : Disabling relaxation: it will not work with multiple definitions Sensor.cpp.o : : In function
MPU6050::dmpGetAccel(int*, unsigned char const*)':
MPU6050_9Axis_MotionApps41.h : dmpGetAccel(int*, unsigned char const*)'
Quad08.cpp.o : :D:\NotInstalled\arduino104\libraries\MPU6050\MPU6050_9Axis_MotionApps41.h:644: first defined here
Sensor.cpp.o : : In function `MPU6050::dmpGetAccel(VectorInt16*, unsigned char const*)':
MPU6050_9Axis_MotionApps41.h : dmpGetAccel(VectorInt16*, unsigned char const*)'
Quad08.ino
#include "Sensor.h"
#include <MPU6050_9Axis_MotionApps41.h>
//#include <MPU6050_6Axis_MotionApps20.h>
//#include <MPU6050.h>
//#include <Streaming.h>
//#include <Base64.h>
//#include <CmdMessenger.h>
//#include <Servo.h>
//#include <Brushless.h>
//#include <PID_v1.h>
//#include <helper_3dmath.h>
//#include <Metro.h>
//#include <HMC5883L.h>
//#include <BMP085.h>
#include <Wire.h>
#include <I2Cdev.h>
// owen classes
//-----------------------------------------------------------------------------------------------------------
void setup() {
Wire.begin();
Serial.begin(115200);
Serial3.begin(19200);
Serial.println("**************************");
Serial.println("* Quad 07 *");
Serial.print ("* ");Serial.print(__DATE__);Serial.print(" ");Serial.print(__TIME__);Serial.println(" *");
Serial.println("**************************");
// center.init();
Serial.flush();
// pinMode(LED_PIN, OUTPUT);// configure LED for output
Serial3.println("Bluetooth OK");
}
//-------------------------------------------------------------------------------------------------
void loop() {
// center.doWork();
}
Sensor.h
// Sensor.h
#ifndef _SENSOR_h
#define _SENSOR_h
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#ifdef __AVR_ATmega2560__
#endif
#ifdef __AVR_ATmega328P__
#endif
#include <MPU6050_9Axis_MotionApps41.h>
#include <I2Cdev.h>
#include <helper_3dmath.h>
//#include <BMP085.h>
//#include <HMC5883L.h>
//#include <PID_v1.h>
extern MPU6050 mpu;
extern bool blinkState;
extern volatile bool mpuInterrupt;
extern uint8_t fifoBuffer[];
extern bool dmpReady;
extern uint8_t devStatus;
extern uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU
extern uint8_t devStatus; // return status after each device operation (0 = success, !0 = error)
extern uint16_t packetSize; // expected DMP packet size (default is 42 bytes)
extern uint16_t fifoCount; // count of all bytes currently in FIFO
extern Quaternion q; // [w, x, y, z] quaternion container
extern VectorFloat gravity; // [x, y, z] gravity vector
extern float ypr[]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector
class Sensor
{
private:
public:
void init();
};
extern Sensor SENSOR;
#endif
Sensor.cpp
#include "Sensor.h"
MPU6050 mpu;
volatile bool mpuInterrupt = false;
bool dmpReady = false; // set true if DMP init was successful
uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU
uint8_t devStatus; // return status after each device operation (0 = success, !0 = error)
uint16_t packetSize; // expected DMP packet size (default is 42 bytes)
uint16_t fifoCount; // count of all bytes currently in FIFO
uint8_t fifoBuffer[64]; // FIFO storage buffer
float temperature; ///< Data from Barometer
float pressure;
float altitude;
float heading;
float degrees; /// Data from compass
// orientation/motion vars
Quaternion q; // [w, x, y, z] quaternion container
VectorFloat gravity; // [x, y, z] gravity vector
float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector
//-----------------------------------------------------------------------------------------------------------
void dmpDataReady() {
mpuInterrupt = true;
}
void Sensor::init()
{
mpu.initialize();
Serial.println(F("Initializing DMP...")); // load and configure the DMP
devStatus = mpu.dmpInitialize();
if (devStatus == 0) // make sure it worked (returns 0 if so) turn on the DMP, now that it's ready
{
Serial.println(F("Enabling DMP..."));
mpu.setDMPEnabled(true);
// enable Arduino interrupt detection
Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)..."));
pinMode(2, INPUT_PULLUP);
attachInterrupt(0, dmpDataReady, RISING);
mpuIntStatus = mpu.getIntStatus();
// set our DMP Ready flag so the main loop() function knows it's okay to use it
Serial.println(F("DMP ready! Waiting for first interrupt..."));
dmpReady = true;
packetSize = mpu.dmpGetFIFOPacketSize(); // get expected DMP packet size for later comparison
}
else
{
// ERROR!
Serial.print(F("DMP Initialization failed (code ")); // 1 = initial memory load failed
Serial.print(devStatus); // 2 = DMP configuration updates failed
Serial.println(F(")")); // (if it's going to break, usually the code will be 1)
}
}
Sensor SENSOR;
Es ist doch richtig, das man bei Verwendung von VM, die Lib´s in die ino-Datei aus core heraus inkludiert, und anschließend im eigentlichen Modul nochmal per copy and past inkludiert. Ich habe Dir mal meine Projektdatei angehangen. Vielleicht hast Du ja Muse hier mal rein zuschauen, und evtl. zu korrigieren
Gruß aus Leverkusen
Willi
Quad08.rar (2.6 MB)