Revision c4f272e1
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 |
*/ |
Adafruit_BNO055.h | ||
---|---|---|
237 | 237 |
void setMode ( adafruit_bno055_opmode_t mode ); |
238 | 238 |
void getRevInfo ( adafruit_bno055_rev_info_t* ); |
239 | 239 |
void displayRevInfo ( void ); |
240 |
// void getSystemStatus ( adafruit_bno055_system_status_t* );
|
|
240 |
void setExtCrystalUse ( boolean usextal );
|
|
241 | 241 |
void getSystemStatus ( uint8_t *system_status, |
242 | 242 |
uint8_t *self_test_result, |
243 | 243 |
uint8_t *system_error); |
244 | 244 |
void displaySystemStatus ( void ); |
245 |
void printDouble ( double val, unsigned int precision ); |
|
246 | 245 |
|
247 | 246 |
imu::Vector<3> getVector ( adafruit_vector_type_t vector_type ); |
248 | 247 |
imu::Quaternion getQuat ( void ); |
examples/rawdata/rawdata.ino | ||
---|---|---|
18 | 18 |
*/ |
19 | 19 |
|
20 | 20 |
/* Set the delay between fresh samples */ |
21 |
#define BNO055_SAMPLERATE_DELAY_MS (500)
|
|
21 |
#define BNO055_SAMPLERATE_DELAY_MS (100)
|
|
22 | 22 |
|
23 | 23 |
Adafruit_BNO055 bno = Adafruit_BNO055(); |
24 | 24 |
|
... | ... | |
52 | 52 |
Serial.print(temp); |
53 | 53 |
Serial.println(" C"); |
54 | 54 |
Serial.println(""); |
55 |
|
|
56 |
bno.setExtCrystalUse(true); |
|
55 | 57 |
} |
56 | 58 |
|
57 | 59 |
/**************************************************************************/ |
... | ... | |
73 | 75 |
|
74 | 76 |
/* Display the floating point data */ |
75 | 77 |
Serial.print("X: "); |
76 |
bno.printDouble(euler.x(), 1000);
|
|
77 |
Serial.print("Y: "); |
|
78 |
bno.printDouble(euler.y(), 1000);
|
|
79 |
Serial.print("Z: "); |
|
80 |
bno.printDouble(euler.z(), 1000);
|
|
78 |
Serial.print(euler.x());
|
|
79 |
Serial.print(" Y: ");
|
|
80 |
Serial.print(euler.y());
|
|
81 |
Serial.print(" Z: ");
|
|
82 |
Serial.print(euler.z());
|
|
81 | 83 |
Serial.println(""); |
82 | 84 |
|
83 | 85 |
/* |
84 | 86 |
// Quaternion data |
85 | 87 |
imu::Quaternion quat = bno.getQuat(); |
86 | 88 |
Serial.print("qW: "); |
87 |
bno.printDouble(quat.w(), 1000);
|
|
88 |
Serial.print("qX: "); |
|
89 |
bno.printDouble(quat.y(), 1000);
|
|
90 |
Serial.print("qY: "); |
|
91 |
bno.printDouble(quat.x(), 1000);
|
|
92 |
Serial.print("qZ: "); |
|
93 |
bno.printDouble(quat.z(), 1000);
|
|
89 |
Serial.print(quat.w(), 4);
|
|
90 |
Serial.print(" qX: ");
|
|
91 |
Serial.print(quat.y(), 4);
|
|
92 |
Serial.print(" qY: ");
|
|
93 |
Serial.print(quat.x(), 4);
|
|
94 |
Serial.print(" qZ: ");
|
|
95 |
Serial.print(quat.z(), 4);
|
|
94 | 96 |
Serial.println(""); |
95 | 97 |
*/ |
96 | 98 |
|
97 | 99 |
delay(BNO055_SAMPLERATE_DELAY_MS); |
98 |
} |
|
100 |
} |
examples/sensorapi/sensorapi.ino | ||
---|---|---|
19 | 19 |
=========== |
20 | 20 |
Connect SCL to analog 5 |
21 | 21 |
Connect SDA to analog 4 |
22 |
Connect VDD to 3.3V DC
|
|
22 |
Connect VDD to 3-5V DC
|
|
23 | 23 |
Connect GROUND to common ground |
24 | 24 |
|
25 | 25 |
History |
... | ... | |
28 | 28 |
*/ |
29 | 29 |
|
30 | 30 |
/* Set the delay between fresh samples */ |
31 |
#define BNO055_SAMPLERATE_DELAY_MS (500)
|
|
31 |
#define BNO055_SAMPLERATE_DELAY_MS (100)
|
|
32 | 32 |
|
33 | 33 |
Adafruit_BNO055 bno = Adafruit_BNO055(55); |
34 | 34 |
|
... | ... | |
84 | 84 |
/* Display chip revision details (optional) */ |
85 | 85 |
// bno.displayRevInfo(); |
86 | 86 |
// Serial.println(""); |
87 |
|
|
88 |
bno.setExtCrystalUse(true); |
|
87 | 89 |
} |
88 | 90 |
|
89 | 91 |
/**************************************************************************/ |
... | ... | |
100 | 102 |
|
101 | 103 |
/* Display the floating point data */ |
102 | 104 |
Serial.print("X: "); |
103 |
bno.printDouble(event.orientation.x, 1000);
|
|
104 |
Serial.print("Y: "); |
|
105 |
bno.printDouble(event.orientation.y, 1000);
|
|
106 |
Serial.print("Z: "); |
|
107 |
bno.printDouble(event.orientation.z, 1000);
|
|
105 |
Serial.print(event.orientation.x, 4);
|
|
106 |
Serial.print("\tY: ");
|
|
107 |
Serial.print(event.orientation.y, 4);
|
|
108 |
Serial.print("\tZ: ");
|
|
109 |
Serial.print(event.orientation.z, 4);
|
|
108 | 110 |
Serial.println(""); |
109 | 111 |
|
110 | 112 |
delay(BNO055_SAMPLERATE_DELAY_MS); |
Also available in: Unified diff