Arduino MKR 1000 et MPU6050

Bonjour tout le monde ! Je reviens avec un autre problème concernant ma carte mkr1000. En premier, je ne sais pas pourquoi mais la carte ne m'affiche jamais les Serial.print() placé dans la fonction void setup() Exemple :

void setup() 
{
  Serial.begin(9600);
  Serial.print("test");
}

void loop() {
  // put your main code here, to run repeatedly:

}

Ne m'affiche rien.

Ensuite, lorsque je compile mon code pour récupérer les valeurs du MPU 6050, le moniteur série (ne m'affiche pas les Serial.print() placé dans la fonction void setup() ) affiche les valeurs entrecoupé de "FIFO overflow!", ce qui ne m'arrivait pas avec ma UNO, sachant que la mkr1000 est beaucoup, beaucoup plus puissante ... Je décide alors de suivre les conseils de ce site : http://www.i2cdevlib.com/forums/topic/27-fifo-overflow/ La première solution me gratifie d'un "TWBR not declared in this scope" Le seconde ne change rien.

En dernier, pendant la compilation, le débuggeur m'affiche plein de warning en orange :

(désolé pour le triple post, limite de 9000 charactère oblige :/)

tu sais, sans un minimum d’explication on ne peux pas t’aider…

tu balances la sauce sans rien dire un mot, çà ne donne pas envie d’aider…

meme pas bonjour ou expliquer ton probleme.

Le résultat du débuggeur :

In file included from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:42:0,

                 from C:\Users\quent\OneDrive\Documents\Arduino\Drone V1.2\DroneV1.2\DroneV1.2.ino:5:

C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050/MPU6050.h:48:0: warning: "pgm_read_byte" redefined [enabled by default]

 #define pgm_read_byte(x) (*(x))

 ^

In file included from C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/Arduino.h:36:0,

                 from sketch\DroneV1.2.ino.cpp:1:

C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/avr/pgmspace.h:101:0: note: this is the location of the previous definition

 #define pgm_read_byte(addr) (*(const unsigned char *)(addr))

 ^

In file included from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:42:0,

                 from C:\Users\quent\OneDrive\Documents\Arduino\Drone V1.2\DroneV1.2\DroneV1.2.ino:5:

C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050/MPU6050.h:49:0: warning: "pgm_read_word" redefined [enabled by default]

 #define pgm_read_word(x) (*(x))

 ^

In file included from C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/Arduino.h:36:0,

                 from sketch\DroneV1.2.ino.cpp:1:

C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/avr/pgmspace.h:102:0: note: this is the location of the previous definition

 #define pgm_read_word(addr) (*(const unsigned short *)(addr))

 ^

In file included from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:42:0,

                 from C:\Users\quent\OneDrive\Documents\Arduino\Drone V1.2\DroneV1.2\DroneV1.2.ino:5:

C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050/MPU6050.h:50:0: warning: "pgm_read_float" redefined [enabled by default]

 #define pgm_read_float(x) (*(x))

 ^

In file included from C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/Arduino.h:36:0,

                 from sketch\DroneV1.2.ino.cpp:1:

C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/avr/pgmspace.h:104:0: note: this is the location of the previous definition

 #define pgm_read_float(addr) (*(const float *)(addr))

 ^

In file included from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:42:0,

                 from C:\Users\quent\OneDrive\Documents\Arduino\Drone V1.2\DroneV1.2\DroneV1.2.ino:5:

C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050/MPU6050.h:51:0: warning: "PSTR" redefined [enabled by default]

 #define PSTR(STR) STR

 ^

In file included from C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/Arduino.h:36:0,

                 from sketch\DroneV1.2.ino.cpp:1:

C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/avr/pgmspace.h:34:0: note: this is the location of the previous definition

 #define PSTR(str) (str)

 ^

C:\Users\quent\OneDrive\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:64:14: warning: #warning Using current Arduino IDE with Wire library is functionally limiting. [-Wcpp]

             #warning Using current Arduino IDE with Wire library is functionally limiting.

              ^

C:\Users\quent\OneDrive\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:65:14: warning: #warning Arduino IDE v1.0.1+ with I2CDEV_BUILTIN_FASTWIRE implementation is recommended. [-Wcpp]

             #warning Arduino IDE v1.0.1+ with I2CDEV_BUILTIN_FASTWIRE implementation is recommended.

              ^

C:\Users\quent\OneDrive\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:66:14: warning: #warning This I2Cdev implementation does not support: [-Wcpp]

             #warning This I2Cdev implementation does not support:

              ^

C:\Users\quent\OneDrive\Documents\Arduino\libraries\I2Cdev\I2Cdev.cpp:67:14: warning: #warning - Timeout detection (some Wire requests block forever) [-Wcpp]

             #warning - Timeout detection (some Wire requests block forever)

              ^

In file included from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.cpp:37:0:

C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.h:48:0: warning: "pgm_read_byte" redefined [enabled by default]

 #define pgm_read_byte(x) (*(x))

 ^

In file included from C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/Arduino.h:36:0,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\I2Cdev/I2Cdev.h:77,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.h:40,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.cpp:37:

C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/avr/pgmspace.h:101:0: note: this is the location of the previous definition

 #define pgm_read_byte(addr) (*(const unsigned char *)(addr))

 ^

In file included from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.cpp:37:0:

C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.h:49:0: warning: "pgm_read_word" redefined [enabled by default]

 #define pgm_read_word(x) (*(x))

 ^

In file included from C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/Arduino.h:36:0,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\I2Cdev/I2Cdev.h:77,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.h:40,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.cpp:37:

C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/avr/pgmspace.h:102:0: note: this is the location of the previous definition

 #define pgm_read_word(addr) (*(const unsigned short *)(addr))

 ^

In file included from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.cpp:37:0:

C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.h:50:0: warning: "pgm_read_float" redefined [enabled by default]

 #define pgm_read_float(x) (*(x))

 ^

In file included from C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/Arduino.h:36:0,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\I2Cdev/I2Cdev.h:77,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.h:40,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.cpp:37:

C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/avr/pgmspace.h:104:0: note: this is the location of the previous definition

 #define pgm_read_float(addr) (*(const float *)(addr))

 ^

In file included from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.cpp:37:0:

C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.h:51:0: warning: "PSTR" redefined [enabled by default]

 #define PSTR(STR) STR

 ^

In file included from C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/Arduino.h:36:0,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\I2Cdev/I2Cdev.h:77,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.h:40,

                 from C:\Users\quent\OneDrive\Documents\Arduino\libraries\MPU6050\MPU6050.cpp:37:

C:\Users\quent\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.5\cores\arduino/avr/pgmspace.h:34:0: note: this is the location of the previous definition

 #define PSTR(str) (str)

 ^.

Le code :

#include <Wire.h>
#include <I2Cdev.h>
#include <Servo.h>
#include "MPU6050_6Axis_MotionApps20.h"

MPU6050 mpu;

#define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)
bool blinkState = false;

// MPU control/status vars
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

// orientation/motion vars
Quaternion q;           // [w, x, y, z]         quaternion container
VectorInt16 aa;         // [x, y, z]            accel sensor measurements
VectorInt16 aaReal;     // [x, y, z]            gravity-free accel sensor measurements
VectorInt16 aaWorld;    // [x, y, z]            world-frame accel sensor measurements
VectorFloat gravity;    // [x, y, z]            gravity vector
float euler[3];         // [psi, theta, phi]    Euler angle container
float ypr[3];           // [yaw, pitch, roll]   yaw/pitch/roll container and gravity vector

int x = 0;

volatile bool mpuInterrupt = false;     // indicates whether MPU interrupt pin has gone high


void dmpDataReady() {
    mpuInterrupt = true;

}

//define Kp,Ki,Kd
float kp[3], ki[3], kd[3];
//define PID variable (error, setpoint, mesure, error sum, error variation, last error and output)
float yprMesure[3], yprPidResult[3], yprOutput[3], yprError[3], yprAddError[3], yprVarError[3], yprLastError[3], yprSetpoint[3];
float rcControllerOutput[3];
float yprAngle[3];

//define ESC
Servo esc1;
Servo esc2;
Servo esc3;
Servo esc4;

void setup() 
{
    Wire.begin();
    
    Serial.begin(115200);

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

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

    // wait for ready
    Serial.println(F("\nSend any character to begin DMP programming and demo: "));
    while (Serial.available() && Serial.read()); // empty buffer
    while (!Serial.available());                 // wait for data
    while (Serial.available() && Serial.read()); // empty buffer again

    // load and configure the DMP
    Serial.println(F("Initializing DMP..."));
    devStatus = mpu.dmpInitialize();

    // supply your own gyro offsets here, scaled for min sensitivity
    mpu.setXGyroOffset(166);
    mpu.setYGyroOffset(-79);
    mpu.setZGyroOffset(35);
    mpu.setZAccelOffset(1590);
    
    // make sure it worked (returns 0 if so)
    if (devStatus == 0) {
        // 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)..."));
        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;

        // get expected DMP packet size for later comparison
        packetSize = mpu.dmpGetFIFOPacketSize();
    } else {
        // ERROR!
        // 1 = initial memory load failed
        // 2 = DMP configuration updates failed
        // (if it's going to break, usually the code will be 1)
        Serial.print(F("DMP Initialization failed (code "));
        Serial.print(devStatus);
        Serial.println(F(")"));
    }

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

    kp[0] = 10.0, kp[1] = 5.1, kp[2] = 4.5;
    ki[0] = 0.055, ki[1] = 0.048, ki[2] = 0.045;
    kd[0] = 18.0, kd[1] = 42, kd[2] = 50;
    
    //attach esc to the right pin
    esc3.attach(2);
    esc2.attach(3);
    esc1.attach(4);
    esc4.attach(5);
}

inline void gyroPidAxe(float yprMesure[], float yprOutput[], float yprSetpoint[], char n)
{
  //Compute error for all the 3 axis
  yprError[n] = yprSetpoint[n] - yprMesure[n];
  //Compute error sum for all the 3 axis
  yprAddError[n] += yprError[n];
  // Compute error variation for all the 3 axis
  yprVarError[n] += yprError[n] - yprLastError[n];
  //Compute angle correction
  yprOutput[n] = kp[n] * yprError[n] + ki[n] * yprAddError[n] + kd[n] * yprVarError[n];
  //Compute Last error
  yprLastError[n] = yprError[n];
}

void gyroPid(float yprMesure[], float yprOutput[], float yprSetpoint[])
{
  gyroPidAxe(yprMesure, yprOutput, yprSetpoint, 0);
  gyroPidAxe(yprMesure, yprOutput, yprSetpoint, 1);
  gyroPidAxe(yprMesure, yprOutput, yprSetpoint, 2);
}


void loop() {
    // if programming failed, don't try to do anything
    if (!dmpReady) return;

    // wait for MPU interrupt or extra packet(s) available
    while (!mpuInterrupt && fifoCount < packetSize) {
    }

    // reset interrupt flag and get INT_STATUS byte
    mpuInterrupt = false;
    mpuIntStatus = mpu.getIntStatus();

    // get current FIFO count
    fifoCount = mpu.getFIFOCount();

    // check for overflow (this should never happen unless our code is too inefficient)
    if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
        // reset so we can continue cleanly
        mpu.resetFIFO();
        Serial.println(F("FIFO overflow!"));

    // otherwise, check for DMP data ready interrupt (this should happen frequently)
    } else if (mpuIntStatus & 0x02) {
        // wait for correct available data length, should be a VERY short wait
        while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();

        // read a packet from FIFO
        mpu.getFIFOBytes(fifoBuffer, packetSize);
        
        // track FIFO count here in case there is > 1 packet available
        // (this lets us immediately read more without waiting for an interrupt)
        fifoCount -= packetSize;

        // display Euler angles in degrees
        mpu.dmpGetQuaternion(&q, fifoBuffer);
        mpu.dmpGetGravity(&gravity, &q);
        mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
        //Serial.print("ypr\t");
        yprAngle[0] = ypr[0] * 180/M_PI;
        yprAngle[1] = ypr[1] * 180/M_PI;
        yprAngle[2] = ypr[2] * 180/M_PI;
        
        //Call the fonction every seconds (for good correction, you need at least a delay of 20ms or faster)
        gyroPid(yprAngle, yprPidResult, rcControllerOutput);

        //Print the corrections values for each angle
        Serial.print(yprAngle[0]);
        Serial.print(" ");
        Serial.print(yprAngle[1]);
        Serial.print(" ");
        Serial.print(yprAngle[2]);
        Serial.print(" ");
        Serial.println(x);

        yprPidResult[0] = constrain(yprPidResult[0], -5000, 5000);
        yprPidResult[1] = constrain(yprPidResult[1], -5000, 5000);
        yprPidResult[2] = constrain(yprPidResult[2], -5000, 5000);

        yprPidResult[0] = map(yprPidResult[0], -5000, 5000, -200, 600);
        yprPidResult[1] = map(yprPidResult[1], -5000, 5000, -200, 600);
        yprPidResult[2] = map(yprPidResult[2], -5000, 5000, -200, 600);
        
        esc1.write(1500 + yprPidResult[0] - yprPidResult[1] - yprPidResult[2]);
        esc2.write(1500 - yprPidResult[0] + yprPidResult[1] - yprPidResult[2]);
        esc3.write(1500 - yprPidResult[0] - yprPidResult[1] - yprPidResult[2]);
        esc4.write(1500 + yprPidResult[0] + yprPidResult[1] + yprPidResult[2]);
                    

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

    
    
    x++;
}

hazerty565: tu sais, sans un minimum d'explication on ne peux pas t'aider.....

tu balances la sauce sans rien dire un mot, çà ne donne pas envie d'aider..

meme pas bonjour ou expliquer ton probleme.

Ce n'est pas ça ! C'est juste qu'avec la limite de 9000 caractère, je ne pouvais pas tout poster en une fois ! J'ai éditer l'ordre des postes pour qu'il soit plus claire

Bon bah ... après une journée de recherche, toujours rien

Je crois que je vais devoir faire avec ... Je vais quand même tenter un post sur le forum anglais, on sait jamais... Merci quand même d'avoir le mon post !