Konflikt zwischen DMXSerial und MPU6050 Library

Hallo miteinander.
Ich habe ein einen Konflikt zwischen 2 Librarys den ich nicht lösen kann.
Ich hab jetzt alle möglichen Librays zum 6050 durch, aber habe bei allen das selbe Problem.
Immer sagt er multiple definition of Vector 18 und 19.
Leider hab ich nicht genug Hintergrundwissen das selbst zu lösen.
Ich hoffe es ist machbar das irgendwie zu umgehen.

Hier ein Beispiel Sketch in den ich nur die Bibliothek eingefügt habe und den Fehler erhalte.

// I2C device class (I2Cdev) demonstration Arduino sketch for MPU6050 class
// 10/7/2011 by Jeff Rowberg <jeff@rowberg.net>
// Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib
//
// Changelog:
//      2013-05-08 - added multiple output formats
//                 - added seamless Fastwire support
//      2011-10-07 - initial release

/* ============================================
I2Cdev device library code is placed under the MIT license
Copyright (c) 2011 Jeff Rowberg

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
===============================================
*/

// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
// for both classes must be in the include path of your project
#include "I2Cdev.h"
#include "MPU6050.h"
#include <DMXSerial.h>

// 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 default I2C address is 0x68
// specific I2C addresses may be passed as a parameter here
// AD0 low = 0x68 (default for InvenSense evaluation board)
// AD0 high = 0x69
MPU6050 accelgyro;
//MPU6050 accelgyro(0x69); // <-- use for AD0 high

int16_t ax, ay, az;
int16_t gx, gy, gz;



// uncomment "OUTPUT_READABLE_ACCELGYRO" if you want to see a tab-separated
// list of the accel X/Y/Z and then gyro X/Y/Z values in decimal. Easy to read,
// not so easy to parse, and slow(er) over UART.
#define OUTPUT_READABLE_ACCELGYRO

// uncomment "OUTPUT_BINARY_ACCELGYRO" to send all 6 axes of data as 16-bit
// binary, one right after the other. This is very fast (as fast as possible
// without compression or data loss), and easy to parse, but impossible to read
// for a human.
//#define OUTPUT_BINARY_ACCELGYRO


#define LED_PIN 13
bool blinkState = false;

void setup() {
    // join I2C bus (I2Cdev library doesn't do this automatically)
    #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
        Wire.begin();
    #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
        Fastwire::setup(400, true);
    #endif

    // initialize serial communication
    // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
    // it's really up to you depending on your project)
    Serial.begin(38400);

    // initialize device
    Serial.println("Initializing I2C devices...");
    accelgyro.initialize();

    // verify connection
    Serial.println("Testing device connections...");
    Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");

    // use the code below to change accel/gyro offset values
    /*
    Serial.println("Updating internal sensor offsets...");
    // -76 -2359 1688 0 0 0
    Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); // -76
    Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); // -2359
    Serial.print(accelgyro.getZAccelOffset()); Serial.print("\t"); // 1688
    Serial.print(accelgyro.getXGyroOffset()); Serial.print("\t"); // 0
    Serial.print(accelgyro.getYGyroOffset()); Serial.print("\t"); // 0
    Serial.print(accelgyro.getZGyroOffset()); Serial.print("\t"); // 0
    Serial.print("\n");
    accelgyro.setXGyroOffset(220);
    accelgyro.setYGyroOffset(76);
    accelgyro.setZGyroOffset(-85);
    Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); // -76
    Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); // -2359
    Serial.print(accelgyro.getZAccelOffset()); Serial.print("\t"); // 1688
    Serial.print(accelgyro.getXGyroOffset()); Serial.print("\t"); // 0
    Serial.print(accelgyro.getYGyroOffset()); Serial.print("\t"); // 0
    Serial.print(accelgyro.getZGyroOffset()); Serial.print("\t"); // 0
    Serial.print("\n");
    */

    // configure Arduino LED pin for output
    pinMode(LED_PIN, OUTPUT);
}

void loop() {
    // read raw accel/gyro measurements from device
    accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

    // these methods (and a few others) are also available
    //accelgyro.getAcceleration(&ax, &ay, &az);
    //accelgyro.getRotation(&gx, &gy, &gz);

    #ifdef OUTPUT_READABLE_ACCELGYRO
        // display tab-separated accel/gyro x/y/z values
        Serial.print("a/g:\t");
        Serial.print(ax); Serial.print("\t");
        Serial.print(ay); Serial.print("\t");
        Serial.print(az); Serial.print("\t");
        Serial.print(gx); Serial.print("\t");
        Serial.print(gy); Serial.print("\t");
        Serial.println(gz);
    #endif

    #ifdef OUTPUT_BINARY_ACCELGYRO
        Serial.write((uint8_t)(ax >> 8)); Serial.write((uint8_t)(ax & 0xFF));
        Serial.write((uint8_t)(ay >> 8)); Serial.write((uint8_t)(ay & 0xFF));
        Serial.write((uint8_t)(az >> 8)); Serial.write((uint8_t)(az & 0xFF));
        Serial.write((uint8_t)(gx >> 8)); Serial.write((uint8_t)(gx & 0xFF));
        Serial.write((uint8_t)(gy >> 8)); Serial.write((uint8_t)(gy & 0xFF));
        Serial.write((uint8_t)(gz >> 8)); Serial.write((uint8_t)(gz & 0xFF));
    #endif

    // blink LED to indicate activity
    blinkState = !blinkState;
    digitalWrite(LED_PIN, blinkState);
}

Hi

Verctor 18 und Vector 19 sind Sprungmarken von Interrupts - wohl Nummer 17 und Nummer 18.
Ob HEX oder DEZ - kA.
Beide Libraries benutzen die gleichen Interrupts - Welche Das sind, ließe sich im Datenblatt des verwendeten µC festetellen.

Umgehen wird wohl eher schwierig - man müsste sich beide Libs anschauen, ob man die ISRs mischen kann - da Das aber wohl Timer-Geschichten sind, werden beide Libs die/den Timer unterschiedlich schnell eingestellt haben wollen.

Denke, Das wird echt schwieriger!

MfG

Hab ich schon fast befürchtet.
Bitteres Lehrgeld, wenn man schon Platinen hat machen lassen.
Ich hatte das ja schonmal mit den Seriellen Monitor und der Dmx library.
Dachte nur der I²C ist was separates weil ich mit Port Expander und Display nie Probleme hatte.
Auf nem Mega mini sollts laufen.
Wenn ich den RX1 Port fürs DMX nutze spuckt mir die IDE zumindest keinen Fehler aus wenn ich den Mega auswähle.
Den 2560 Mini Pro is ja nicht extra aufgeführt in der IDE.
Wird der dann wie der normale behandelt?

Hi

Liest sich zumindest, wie ein Mega2560
Mega 2560 PRO MINI, ATmega2560-16AU, The board is compatible with Arduino Mega 2560

MfG

Dachte nur der I²C ist was separates weil ich mit Port Expander und Display nie Probleme hatte.

Du schreibst doch in dem MPU Sketch klar auf die serielle Schnittstelle. Die gleiche Schnittstelle die von der DMX Library auf Register-Ebene anders angesprochen wird

Wenn ich den RX1 Port fürs DMX nutze spuckt mir die IDE zumindest keinen Fehler aus wenn ich den Mega auswähle.

Klar. Serial1 ist was anderes als Serial. Die hat ihre eigenen Register

Das es die gleiche Schnittstelle ist weiß ich jetzt auch ^^.
Vieles lernt man halt erst wenn man wie der Ochs vorm Berg steht.
Jedenfalls ist der Mega Mini jetzt da und man kann ihn flashen wie einen normalen Mega.
Da ist kein anderer Eintrag in der IDE nötig.
Hab jetzt neue Platinen in China geordert und werd auf die Schnelle nen Adapter basteln um den auf ne alte Platine zu bringen um weiter machen zu können.
Ich hoff da kommen keine weiteren Hindernisse. Aber ich denk das sollt jetzt funktionieren.