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("Enabling interrupt detection (Arduino external interrupt 0)"));
 Serial.print(digitalPinToInterrupt(INTERRUPT_PIN));
 Serial.println(F(")..."));
 attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING);
 
 mpuIntStatus = mpu.getIntStatus();
 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.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("FIFO overflow!"));
 
 }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 > 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(&q, fifoBuffer);
 mpu.dmpGetEuler(euler, &q);
 Serial.print("euler\t");
 Serial.print(euler[0] * 180/M_PI);
 Serial.print("\t");
 Serial.print(euler[1] * 180/M_PI);
 Serial.print("\t");
 Serial.println(euler[2] * 180/M_PI);
 #endif
 #ifdef OUTPUT_READABLE_YAWPITCHROLL
 // display Euler angles in degrees
 mpu.dmpGetQuaternion(&q, fifoBuffer);
 mpu.dmpGetGravity(&gravity, &q);
 mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
 Yaw = ypr[0]*180/M_PI;
 Serial.print("ypr\t");
 Serial.print(ypr[0] * 180/M_PI);
 Serial.print("\t");
 Serial.print(ypr[1] * 180/M_PI);
 Serial.print("\t");
 Serial.println(ypr[2] * 180/M_PI);
 #endif
 #ifdef OUTPUT_READABLE_REALACCEL
 // display real acceleration, adjusted to remove gravity
 mpu.dmpGetQuaternion(&q, fifoBuffer);
 mpu.dmpGetAccel(&aa, fifoBuffer);
 mpu.dmpGetGravity(&gravity, &q);
 mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
 Serial.print("areal\t");
 Serial.print(aaReal.x);
 Serial.print("\t");
 Serial.print(aaReal.y);
 Serial.print("\t");
 Serial.println(aaReal.z);
 #endif
 #ifdef OUTPUT_READABLE_WORLDACCEL
 mpu.dmpGetQuaternion(&q, fifoBuffer);
 mpu.dmpGetAccel(&aa, fifoBuffer);
 mpu.dmpGetGravity(&gravity, &q);
 mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
 mpu.dmpGetLinearAccelInWorld(&aaWorld, &aaReal, &q);
 Serial.print("aworld\t");
 Serial.print(aaWorld.x);
 Serial.print("\t");
 Serial.print(aaWorld.y);
 Serial.print("\t");
 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

asked Dec 8, 2020 at 1:50
2
  • Only the first one perhaps two errors in compiler output are normally useful. The ones that follow are often the result of the first error or the compiler's attempt to recover from it and sometimes end up being more misleading than helpful. It's probably enough to paste just the top of the output. Commented Dec 8, 2020 at 2:29
  • Thanks for responding. I had multiples of some libraries. Don't know how that happened. But I uninstalled all the libraries, and manually installed the ones I needed. It works now. Commented Dec 8, 2020 at 2:45

0

Know someone who can answer? Share a link to this question via email, Twitter, or Facebook.

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.