Page 52 - MDP2022-2
P. 52

//  join  I2C  bus  (I2Cdev  library  doesn't  do  this  automatically)
                    #if  I2CDEV_IMPLEMENTATION  ==  I2CDEV_ARDUINO_WIRE
                            Wire.begin();
                            Wire.setClock(400000);  //  400kHz  I2C  clock.  Comment  this  line  if  having  compilation  difficulties
                    #elif  I2CDEV_IMPLEMENTATION  ==  I2CDEV_BUILTIN_FASTWIRE
                            Fastwire::setup(400,  true);
                    #endif

                    //  initialize  serial  communication
                    //  (115200  chosen  because  it  is  required  for  Teapot  Demo  output,  but  it's
                    //  really  up  to  you  depending  on  your  project)

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

                    //  NOTE:  8MHz  or  slower  host  processors,  like  the  Teensy  @  3.3V  or  Arduino
                    //  Pro  Mini  running  at  3.3V,  cannot  handle  this  baud  rate  reliably  due  to
                    //  the  baud  timing  being  too  misaligned  with  processor  ticks.  You  must  use
                    //  38400  or  slower  in  these  cases,  or  use  some  kind  of  external  separate
                    //  crystal  solution  for  the  UART  timer.

                    //  initialize  device
                    Serial.println(F("Initializing  I2C  devices..."));
                    mpu.initialize();
                    pinMode(INTERRUPT_PIN,  INPUT);

                    //  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(220);
                    mpu.setYGyroOffset(76);
                    mpu.setZGyroOffset(-85);
                    mpu.setZAccelOffset(1788);  //  1688  factory  default  for  my  test  chip

                    //  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);
   47   48   49   50   51   52   53   54   55   56   57