| 472 | 
  472 | 
  
            setMode(OPERATION_MODE_CONFIG);
 
   | 
  | 473 | 
  473 | 
  
            delay(25);
 
   | 
  | 474 | 
  474 | 
  
    
 
   | 
   | 
  475 | 
  
            /* Accel offset range depends on the G-range:
 
   | 
   | 
  476 | 
  
               +/-2g  = +/- 2000 mg
 
   | 
   | 
  477 | 
  
               +/-4g  = +/- 4000 mg
 
   | 
   | 
  478 | 
  
               +/-8g  = +/- 8000 mg
 
   | 
   | 
  479 | 
  
               +/-1§g = +/- 16000 mg */
 
   | 
  | 475 | 
  480 | 
  
            offsets_type.accel_offset_x = (read8(ACCEL_OFFSET_X_MSB_ADDR) << 8) | (read8(ACCEL_OFFSET_X_LSB_ADDR));
 
   | 
  | 476 | 
  481 | 
  
            offsets_type.accel_offset_y = (read8(ACCEL_OFFSET_Y_MSB_ADDR) << 8) | (read8(ACCEL_OFFSET_Y_LSB_ADDR));
 
   | 
  | 477 | 
  482 | 
  
            offsets_type.accel_offset_z = (read8(ACCEL_OFFSET_Z_MSB_ADDR) << 8) | (read8(ACCEL_OFFSET_Z_LSB_ADDR));
 
   | 
  | 478 | 
  483 | 
  
    
 
   | 
  | 479 | 
   | 
  
            offsets_type.gyro_offset_x = (read8(GYRO_OFFSET_X_MSB_ADDR) << 8) | (read8(GYRO_OFFSET_X_LSB_ADDR));
 
   | 
  | 480 | 
   | 
  
            offsets_type.gyro_offset_y = (read8(GYRO_OFFSET_Y_MSB_ADDR) << 8) | (read8(GYRO_OFFSET_Y_LSB_ADDR));
 
   | 
  | 481 | 
   | 
  
            offsets_type.gyro_offset_z = (read8(GYRO_OFFSET_Z_MSB_ADDR) << 8) | (read8(GYRO_OFFSET_Z_LSB_ADDR));
 
   | 
  | 482 | 
   | 
  
    
 
   | 
   | 
  484 | 
  
            /* Magnetometer offset range = +/- 6400 LSB where 1uT = 16 LSB */
 
   | 
  | 483 | 
  485 | 
  
            offsets_type.mag_offset_x = (read8(MAG_OFFSET_X_MSB_ADDR) << 8) | (read8(MAG_OFFSET_X_LSB_ADDR));
 
   | 
  | 484 | 
  486 | 
  
            offsets_type.mag_offset_y = (read8(MAG_OFFSET_Y_MSB_ADDR) << 8) | (read8(MAG_OFFSET_Y_LSB_ADDR));
 
   | 
  | 485 | 
  487 | 
  
            offsets_type.mag_offset_z = (read8(MAG_OFFSET_Z_MSB_ADDR) << 8) | (read8(MAG_OFFSET_Z_LSB_ADDR));
 
   | 
  | 486 | 
  488 | 
  
    
 
   | 
   | 
  489 | 
  
            /* Gyro offset range depends on the DPS range:
 
   | 
   | 
  490 | 
  
              2000 dps = +/- 32000 LSB
 
   | 
   | 
  491 | 
  
              1000 dps = +/- 16000 LSB
 
   | 
   | 
  492 | 
  
               500 dps = +/- 8000 LSB
 
   | 
   | 
  493 | 
  
               250 dps = +/- 4000 LSB
 
   | 
   | 
  494 | 
  
               125 dps = +/- 2000 LSB
 
   | 
   | 
  495 | 
  
               ... where 1 DPS = 16 LSB */
 
   | 
   | 
  496 | 
  
            offsets_type.gyro_offset_x = (read8(GYRO_OFFSET_X_MSB_ADDR) << 8) | (read8(GYRO_OFFSET_X_LSB_ADDR));
 
   | 
   | 
  497 | 
  
            offsets_type.gyro_offset_y = (read8(GYRO_OFFSET_Y_MSB_ADDR) << 8) | (read8(GYRO_OFFSET_Y_LSB_ADDR));
 
   | 
   | 
  498 | 
  
            offsets_type.gyro_offset_z = (read8(GYRO_OFFSET_Z_MSB_ADDR) << 8) | (read8(GYRO_OFFSET_Z_LSB_ADDR));
 
   | 
   | 
  499 | 
  
    
 
   | 
   | 
  500 | 
  
            /* Accelerometer radius = +/- 1000 LSB */
 
   | 
  | 487 | 
  501 | 
  
            offsets_type.accel_radius = (read8(ACCEL_RADIUS_MSB_ADDR) << 8) | (read8(ACCEL_RADIUS_LSB_ADDR));
 
   | 
   | 
  502 | 
  
    
 
   | 
   | 
  503 | 
  
            /* Magnetometer radius = +/- 960 LSB */
 
   | 
  | 488 | 
  504 | 
  
            offsets_type.mag_radius = (read8(MAG_RADIUS_MSB_ADDR) << 8) | (read8(MAG_RADIUS_LSB_ADDR));
 
   | 
  | 489 | 
  505 | 
  
    
 
   | 
  | 490 | 
  506 | 
  
            setMode(lastMode);
 
   | 
  | ... | ... |  | 
  | 505 | 
  521 | 
  
        setMode(OPERATION_MODE_CONFIG);
 
   | 
  | 506 | 
  522 | 
  
        delay(25);
 
   | 
  | 507 | 
  523 | 
  
    
 
   | 
   | 
  524 | 
  
        /* Note: Configuration will take place only when user writes to the last
 
   | 
   | 
  525 | 
  
           byte of each config data pair (ex. ACCEL_OFFSET_Z_MSB_ADDR, etc.).
 
   | 
   | 
  526 | 
  
           Therefore the last byte must be written whenever the user wants to
 
   | 
   | 
  527 | 
  
           changes the configuration. */
 
   | 
   | 
  528 | 
  
    
 
   | 
  | 508 | 
  529 | 
  
        /* A writeLen() would make this much cleaner */
 
   | 
  | 509 | 
  530 | 
  
        write8(ACCEL_OFFSET_X_LSB_ADDR, calibData[0]);
 
   | 
  | 510 | 
  531 | 
  
        write8(ACCEL_OFFSET_X_MSB_ADDR, calibData[1]);
 
   | 
  | ... | ... |  | 
  | 547 | 
  568 | 
  
        setMode(OPERATION_MODE_CONFIG);
 
   | 
  | 548 | 
  569 | 
  
        delay(25);
 
   | 
  | 549 | 
  570 | 
  
    
 
   | 
   | 
  571 | 
  
        /* Note: Configuration will take place only when user writes to the last
 
   | 
   | 
  572 | 
  
           byte of each config data pair (ex. ACCEL_OFFSET_Z_MSB_ADDR, etc.).
 
   | 
   | 
  573 | 
  
           Therefore the last byte must be written whenever the user wants to
 
   | 
   | 
  574 | 
  
           changes the configuration. */
 
   | 
   | 
  575 | 
  
    
 
   | 
  | 550 | 
  576 | 
  
        write8(ACCEL_OFFSET_X_LSB_ADDR, (offsets_type.accel_offset_x) & 0x0FF);
 
   | 
  | 551 | 
  577 | 
  
        write8(ACCEL_OFFSET_X_MSB_ADDR, (offsets_type.accel_offset_x >> 8) & 0x0FF);
 
   | 
  | 552 | 
  578 | 
  
        write8(ACCEL_OFFSET_Y_LSB_ADDR, (offsets_type.accel_offset_y) & 0x0FF);
 
   | 
  | ... | ... |  | 
  | 554 | 
  580 | 
  
        write8(ACCEL_OFFSET_Z_LSB_ADDR, (offsets_type.accel_offset_z) & 0x0FF);
 
   | 
  | 555 | 
  581 | 
  
        write8(ACCEL_OFFSET_Z_MSB_ADDR, (offsets_type.accel_offset_z >> 8) & 0x0FF);
 
   | 
  | 556 | 
  582 | 
  
    
 
   | 
  | 557 | 
   | 
  
        write8(GYRO_OFFSET_X_LSB_ADDR, (offsets_type.gyro_offset_x) & 0x0FF);
 
   | 
  | 558 | 
   | 
  
        write8(GYRO_OFFSET_X_MSB_ADDR, (offsets_type.gyro_offset_x >> 8) & 0x0FF);
 
   | 
  | 559 | 
   | 
  
        write8(GYRO_OFFSET_Y_LSB_ADDR, (offsets_type.gyro_offset_y) & 0x0FF);
 
   | 
  | 560 | 
   | 
  
        write8(GYRO_OFFSET_Y_MSB_ADDR, (offsets_type.gyro_offset_y >> 8) & 0x0FF);
 
   | 
  | 561 | 
   | 
  
        write8(GYRO_OFFSET_Z_LSB_ADDR, (offsets_type.gyro_offset_z) & 0x0FF);
 
   | 
  | 562 | 
   | 
  
        write8(GYRO_OFFSET_Z_MSB_ADDR, (offsets_type.gyro_offset_z >> 8) & 0x0FF);
 
   | 
  | 563 | 
   | 
  
    
 
   | 
  | 564 | 
  583 | 
  
        write8(MAG_OFFSET_X_LSB_ADDR, (offsets_type.mag_offset_x) & 0x0FF);
 
   | 
  | 565 | 
  584 | 
  
        write8(MAG_OFFSET_X_MSB_ADDR, (offsets_type.mag_offset_x >> 8) & 0x0FF);
 
   | 
  | 566 | 
  585 | 
  
        write8(MAG_OFFSET_Y_LSB_ADDR, (offsets_type.mag_offset_y) & 0x0FF);
 
   | 
  | ... | ... |  | 
  | 568 | 
  587 | 
  
        write8(MAG_OFFSET_Z_LSB_ADDR, (offsets_type.mag_offset_z) & 0x0FF);
 
   | 
  | 569 | 
  588 | 
  
        write8(MAG_OFFSET_Z_MSB_ADDR, (offsets_type.mag_offset_z >> 8) & 0x0FF);
 
   | 
  | 570 | 
  589 | 
  
    
 
   | 
   | 
  590 | 
  
        write8(GYRO_OFFSET_X_LSB_ADDR, (offsets_type.gyro_offset_x) & 0x0FF);
 
   | 
   | 
  591 | 
  
        write8(GYRO_OFFSET_X_MSB_ADDR, (offsets_type.gyro_offset_x >> 8) & 0x0FF);
 
   | 
   | 
  592 | 
  
        write8(GYRO_OFFSET_Y_LSB_ADDR, (offsets_type.gyro_offset_y) & 0x0FF);
 
   | 
   | 
  593 | 
  
        write8(GYRO_OFFSET_Y_MSB_ADDR, (offsets_type.gyro_offset_y >> 8) & 0x0FF);
 
   | 
   | 
  594 | 
  
        write8(GYRO_OFFSET_Z_LSB_ADDR, (offsets_type.gyro_offset_z) & 0x0FF);
 
   | 
   | 
  595 | 
  
        write8(GYRO_OFFSET_Z_MSB_ADDR, (offsets_type.gyro_offset_z >> 8) & 0x0FF);
 
   | 
   | 
  596 | 
  
    
 
   | 
  | 571 | 
  597 | 
  
        write8(ACCEL_RADIUS_LSB_ADDR, (offsets_type.accel_radius) & 0x0FF);
 
   | 
  | 572 | 
  598 | 
  
        write8(ACCEL_RADIUS_MSB_ADDR, (offsets_type.accel_radius >> 8) & 0x0FF);
 
   | 
  | 573 | 
  599 | 
  
    
 
   | 
  | ... | ... |  | 
  | 577 | 
  603 | 
  
        setMode(lastMode);
 
   | 
  | 578 | 
  604 | 
  
    }
 
   | 
  | 579 | 
  605 | 
  
    
 
   | 
   | 
  606 | 
  
    /**************************************************************************/
 
   | 
   | 
  607 | 
  
    /*!
 
   | 
   | 
  608 | 
  
        @brief  Checks of all cal status values are set to 3 (fully calibrated)
 
   | 
   | 
  609 | 
  
    */
 
   | 
   | 
  610 | 
  
    /**************************************************************************/
 
   | 
  | 580 | 
  611 | 
  
    bool Adafruit_BNO055::isFullyCalibrated(void)
 
   | 
  | 581 | 
  612 | 
  
    {
   | 
  | 582 | 
  613 | 
  
        uint8_t system, gyro, accel, mag;
 
   |