Revision c4f272e1 Adafruit_BNO055.cpp

View differences:

Adafruit_BNO055.cpp
61 61
  uint8_t id = read8(BNO055_CHIP_ID_ADDR);
62 62
  if(id != BNO055_ID)
63 63
  {
64
    return false;
64
    delay(1000); // hold on for boot
65
    if(id != BNO055_ID) {
66
      return false;  // still not? ok bail
67
    }
65 68
  }
66 69

  
67 70
  /* Switch to config mode (just in case since this is the default) */
68 71
  setMode(OPERATION_MODE_CONFIG);
72

  
73
  /* Reset */
74
  write8(BNO055_SYS_TRIGGER_ADDR, 0x20); //reset the sensor
75
  while (read8(BNO055_CHIP_ID_ADDR) != BNO055_ID) //wait for boot
76
    delay(10);
69 77
  
78
  delay(50);
79
 
70 80
  /* Set to normal power mode */
71 81
  write8(BNO055_PWR_MODE_ADDR, POWER_MODE_NORMAL);
72 82
  delay(10);
83

  
84
  write8(BNO055_PAGE_ID_ADDR, 0);
73 85
  
74 86
  /* Set the output units */
75 87
  uint8_t unitsel = (0 << 7) | /* Orientation = Android */
......
79 91
                    (0 << 0);  /* Accelerometer = m/s^2 */
80 92
  write8(BNO055_UNIT_SEL_ADDR, unitsel);
81 93

  
94
  write8(BNO055_SYS_TRIGGER_ADDR, 0x0);
95
  delay(10);
82 96
  /* Set the requested operating mode (see section 3.3) */
83
  write8(BNO055_OPR_MODE_ADDR, mode);
97
  setMode(mode);
84 98
  delay(20);
85 99

  
86 100
  return true;
......
94 108
void Adafruit_BNO055::setMode(adafruit_bno055_opmode_t mode)
95 109
{
96 110
  _mode = mode;
97
  
111
  //Serial.print("Mode: 0x"); Serial.println(mode, HEX);
98 112
  write8(BNO055_OPR_MODE_ADDR, _mode);
99 113
  delay(30);
100 114
}
101 115

  
102 116
/**************************************************************************/
103 117
/*!
118
    @brief  Use the external 32.768KHz crystal
119
*/
120
/**************************************************************************/
121
void Adafruit_BNO055::setExtCrystalUse(boolean usextal)
122
{
123
  adafruit_bno055_opmode_t modeback = _mode;
124

  
125
  /* Switch to config mode (just in case since this is the default) */
126
  setMode(OPERATION_MODE_CONFIG);
127
  delay(25);
128
  write8(BNO055_PAGE_ID_ADDR, 0);
129
  if (usextal) {
130
    write8(BNO055_SYS_TRIGGER_ADDR, 0x80);
131
  } else {
132
    write8(BNO055_SYS_TRIGGER_ADDR, 0x00);
133
  }
134
  delay(10);
135
  /* Set the requested operating mode (see section 3.3) */
136
  setMode(modeback);
137
  delay(20);
138
}
139

  
140

  
141
/**************************************************************************/
142
/*!
104 143
    @brief  Gets the latest system status info
105 144
*/
106 145
/**************************************************************************/
107 146
void Adafruit_BNO055::getSystemStatus(uint8_t *system_status, uint8_t *self_test_result, uint8_t *system_error)
108 147
{
148
  adafruit_bno055_opmode_t backupmode = _mode;
149

  
150
  setMode(OPERATION_MODE_CONFIG);
151
  delay(20);
152
  write8(BNO055_PAGE_ID_ADDR, 0);
153

  
109 154
  write8(BNO055_SYS_TRIGGER_ADDR, read8(BNO055_SYS_TRIGGER_ADDR) | 0x1);
110
  delay(10);
155
  delay(1000);
111 156
  /* Read the system status register */
112 157
  if (system_status != 0)
113 158
    *system_status    = read8(BNO055_SYS_STAT_ADDR);
......
115 160
    *self_test_result = read8(BNO055_SELFTEST_RESULT_ADDR);
116 161
  if (system_error != 0)
117 162
    *system_error     = read8(BNO055_SYS_ERR_ADDR);
163

  
164
  setMode(backupmode);
165
  delay(20);
118 166
}
119 167

  
120 168
/**************************************************************************/
......
316 364
}
317 365

  
318 366
/**************************************************************************/
319
/*
320
    Prints a float or double with the specified number of decimal places.
321

  
322
    'precision' should be 1 followed by a zero for every decimal place
323
    desired, so '100' will produce two decimal places:
324

  
325
    print_double(3.1415, 100); // Output = 3.14
326
*/
327
/**************************************************************************/
328
void Adafruit_BNO055::printDouble(double val, unsigned int precision)
329
{
330
  /* Print the integer portion */
331
  Serial.print (int(val));
332
  Serial.print(".");
333
  
334
  /* Print the fraction portion */
335
  unsigned int frac;
336
  if(val >= 0)
337
  {
338
    frac = (val - int(val)) * precision;
339
  }
340
  else
341
  {
342
    frac = (int(val)- val ) * precision;
343
  }
344
  Serial.println(frac,DEC) ;
345
}
346

  
347
/**************************************************************************/
348 367
/*!
349 368
    @brief  Provides the sensor_t data for this sensor
350 369
*/

Also available in: Unified diff