1

This is the code I'm working with. I'm using it for video stabilization system. It was working fine but for some reason now it gives me this error? Is it because I deleted the library and installed again? Please help. I'm new to arduino. Hopefully I formatted this correctly.

#include <Servo.h>
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif

MPU6050 mpu; Servo myServo; // define servo int servoPin=9; float PWM = 0; float Yaw = 0;

#define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 #define LED_PIN 13

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 //packet structure for InvenSense teapot demo

volatile bool mpuInterrupt=false; void dmpDataReady(){ mpuInterrupt=true; } // ================================================================ // === INITIAL SETUP === // ================================================================ void setup() { // join I2C bus (I2Cdev library doesn't do this automatically) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Wire.setClock(400000);

#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true);

#endif

Serial.begin(115200); while (!Serial); // wait for Leonardo enumeration, others continue immediately

// initialize device Serial.println(F("Initializing I2C devices...")); pinMode(INTERRUPT_PIN, INPUT); // testing connection... Serial.println(F("Testing device connections...")); Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed")); // load and configure the DMP Serial.println(F("Initializing DMP")); devStatus = mpu.dmpInitialize();

// INPUT CALIBRATED OFFSETS HERE; SPECIFIC FOR EACH UNIT AND EACH MOUNTING CONFIGURATION!!!! //fix offsets #s when we use mount mpu.setXGyroOffset(0); mpu.setYGyroOffset(0); mpu.setZGyroOffset(0); //mpu.setXAccelOffset(-651); //unneccesary //mpu.setYAccelOffset(670); //also unneccesary mpu.setZAccelOffset(17);

// make sure it worked (returns 0 if so) if (devStatus == 0){ // Calibration Time: generate offsets and calibrate our MPU6050 // mpu.CalibrateAccel(6); // mpu.CalibrateGyro(6); // mpu.PrintActiveOffsets(); // turn on the DMP, now that it's ready Serial.println(F("Enabling DMP...")); mpu.setDMPEnabled(true);

// enable Arduino interrupt detection
Serial.print(F(&quot;Enabling interrupt detection (Arduino external interrupt 0)&quot;));
Serial.print(digitalPinToInterrupt(INTERRUPT_PIN));
Serial.println(F(&quot;)...&quot;));
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING);

mpuIntStatus = mpu.getIntStatus();
Serial.println(F(&quot;DMP ready! Waiting for first interrupt...&quot;));
    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.println(devStatus); Serial.println(F(")")); }

// configure LED for output pinMode(LED_PIN, OUTPUT); myServo.attach(servoPin); PWM=0; }

//main program loop

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) { if (mpuInterrupt && fifoCount < packetSize) { // try to get out of the infinite loop fifoCount = mpu.getFIFOCount(); } // other program behavior stuff here }

//reset inerrupt flag 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 (fifoCount<packetSize){

// reset so we can continue cleanly

}else if ((mpuIntStatus & _BV(MPU6050_INTERRUPT_FIFO_OFLOW_BIT)) || fifoCount >= 1024) {

mpu.resetFIFO();
Serial.println(F(&quot;FIFO overflow!&quot;));

}else if (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)){

while (fifoCount>=packetSize) { // check for correct available data length //if (fifoCount < packetSize) //return; // fifoCount = mpu.getFIFOCount();

// read a packet from FIFO
mpu.getFIFOBytes(fifoBuffer, packetSize);

// track FIFO count here in case there is &gt; 1 packet available
fifoCount -= packetSize;

} #ifdef OUTPUT_READABLE_QUATERNION //display quaternion values in easty matrix form: w x y x mpu.dmpGetQuaternion(&q, fifoBuffer); Serial.print("quat\t"); Serial.print(q.w); Serial.print("\t"); Serial.print(q.x); Serial.print("\t"); Serial.print(q.y); Serial.print("\t"); Serial.print(q.z);

#endif
#ifdef OUTPUT_READABLE_EULER
        // display Euler angles in degrees
        mpu.dmpGetQuaternion(&amp;q, fifoBuffer);
        mpu.dmpGetEuler(euler, &amp;q);
        Serial.print(&quot;euler\t&quot;);
        Serial.print(euler[0] * 180/M_PI);
        Serial.print(&quot;\t&quot;);
        Serial.print(euler[1] * 180/M_PI);
        Serial.print(&quot;\t&quot;);
        Serial.println(euler[2] * 180/M_PI);
    #endif
    #ifdef OUTPUT_READABLE_YAWPITCHROLL
        // display Euler angles in degrees
        mpu.dmpGetQuaternion(&amp;q, fifoBuffer);
        mpu.dmpGetGravity(&amp;gravity, &amp;q);
        mpu.dmpGetYawPitchRoll(ypr, &amp;q, &amp;gravity);
        Yaw = ypr[0]*180/M_PI;
        Serial.print(&quot;ypr\t&quot;);
        Serial.print(ypr[0] * 180/M_PI);
        Serial.print(&quot;\t&quot;);
        Serial.print(ypr[1] * 180/M_PI);
        Serial.print(&quot;\t&quot;);
        Serial.println(ypr[2] * 180/M_PI);
    #endif
    #ifdef OUTPUT_READABLE_REALACCEL
        // display real acceleration, adjusted to remove gravity
        mpu.dmpGetQuaternion(&amp;q, fifoBuffer);
        mpu.dmpGetAccel(&amp;aa, fifoBuffer);
        mpu.dmpGetGravity(&amp;gravity, &amp;q);
        mpu.dmpGetLinearAccel(&amp;aaReal, &amp;aa, &amp;gravity);
        Serial.print(&quot;areal\t&quot;);
        Serial.print(aaReal.x);
        Serial.print(&quot;\t&quot;);
        Serial.print(aaReal.y);
        Serial.print(&quot;\t&quot;);
        Serial.println(aaReal.z);
    #endif
    #ifdef OUTPUT_READABLE_WORLDACCEL
        mpu.dmpGetQuaternion(&amp;q, fifoBuffer);
        mpu.dmpGetAccel(&amp;aa, fifoBuffer);
        mpu.dmpGetGravity(&amp;gravity, &amp;q);
        mpu.dmpGetLinearAccel(&amp;aaReal, &amp;aa, &amp;gravity);
        mpu.dmpGetLinearAccelInWorld(&amp;aaWorld, &amp;aaReal, &amp;q);
        Serial.print(&quot;aworld\t&quot;);
        Serial.print(aaWorld.x);
        Serial.print(&quot;\t&quot;);
        Serial.print(aaWorld.y);
        Serial.print(&quot;\t&quot;);
        Serial.println(aaWorld.z);
    #endif 

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

} PWM= map(Yaw, -180, 180, 1860, 1140); myServo.write(PWM); Serial.println(PWM); Serial.println(Yaw); }

If the error code is needed please let me know. It's too long to attach in the body

Dani
  • 11
  • 2

0 Answers0