Revision fcd68623
| Adafruit_BNO055.cpp | ||
|---|---|---|
| 306 | 306 |
} |
| 307 | 307 |
|
| 308 | 308 |
/**************************************************************************/ |
| 309 |
/* |
|
| 310 |
Prints a float or double with the specified number of decimal places. |
|
| 311 |
|
|
| 312 |
'precision' should be 1 followed by a zero for every decimal place |
|
| 313 |
desired, so '100' will produce two decimal places: |
|
| 314 |
|
|
| 315 |
print_double(3.1415, 100); // Output = 3.14 |
|
| 316 |
*/ |
|
| 317 |
/**************************************************************************/ |
|
| 318 |
void Adafruit_BNO055::printDouble(double val, unsigned int precision) |
|
| 319 |
{
|
|
| 320 |
/* Print the integer portion */ |
|
| 321 |
Serial.print (int(val)); |
|
| 322 |
Serial.print(".");
|
|
| 323 |
|
|
| 324 |
/* Print the fraction portion */ |
|
| 325 |
unsigned int frac; |
|
| 326 |
if(val >= 0) |
|
| 327 |
{
|
|
| 328 |
frac = (val - int(val)) * precision; |
|
| 329 |
} |
|
| 330 |
else |
|
| 331 |
{
|
|
| 332 |
frac = (int(val)- val ) * precision; |
|
| 333 |
} |
|
| 334 |
Serial.println(frac,DEC) ; |
|
| 335 |
} |
|
| 336 |
|
|
| 337 |
/**************************************************************************/ |
|
| 309 | 338 |
/*! |
| 310 | 339 |
@brief Provides the sensor_t data for this sensor |
| 311 | 340 |
*/ |
| ... | ... | |
| 334 | 363 |
/**************************************************************************/ |
| 335 | 364 |
bool Adafruit_BNO055::getEvent(sensors_event_t *event) |
| 336 | 365 |
{
|
| 337 |
float orientation; |
|
| 338 |
|
|
| 339 | 366 |
/* Clear the event */ |
| 340 | 367 |
memset(event, 0, sizeof(sensors_event_t)); |
| 341 | 368 |
|
| 342 | 369 |
event->version = sizeof(sensors_event_t); |
| 343 | 370 |
event->sensor_id = _sensorID; |
| 344 | 371 |
event->type = SENSOR_TYPE_ORIENTATION; |
| 345 |
event->timestamp = 0; |
|
| 346 |
/* |
|
| 347 |
getPressure(&pressure_kPa); |
|
| 348 |
event->pressure = pressure_kPa / 100.0F; |
|
| 349 |
*/ |
|
| 350 |
|
|
| 372 |
event->timestamp = millis(); |
|
| 373 |
|
|
| 374 |
/* Get a Euler angle sample for orientation */ |
|
| 375 |
imu::Vector<3> euler = getVector(Adafruit_BNO055::VECTOR_EULER); |
|
| 376 |
event->orientation.x = euler.x(); |
|
| 377 |
event->orientation.y = euler.y(); |
|
| 378 |
event->orientation.z = euler.z(); |
|
| 379 |
|
|
| 351 | 380 |
return true; |
| 352 | 381 |
} |
| 353 | 382 |
|
| Adafruit_BNO055.h | ||
|---|---|---|
| 246 | 246 |
void displayRevInfo ( void ); |
| 247 | 247 |
void getSystemStatus ( adafruit_bno055_system_status_t* ); |
| 248 | 248 |
void displaySystemStatus ( void ); |
| 249 |
void printDouble ( double val, unsigned int precision ); |
|
| 249 | 250 |
|
| 250 | 251 |
imu::Vector<3> getVector ( adafruit_vector_type_t vector_type ); |
| 251 | 252 |
imu::Quaternion getQuat ( void ); |
| examples/rawdata/rawdata.ino | ||
|---|---|---|
| 1 |
#include <Wire.h> |
|
| 2 |
#include <Adafruit_Sensor.h> |
|
| 3 |
#include <Adafruit_BNO055.h> |
|
| 4 |
#include <utility/imumaths.h> |
|
| 5 |
|
|
| 6 |
/* This driver reads raw data from the BNO055 |
|
| 7 |
|
|
| 8 |
Connections |
|
| 9 |
=========== |
|
| 10 |
Connect SCL to analog 5 |
|
| 11 |
Connect SDA to analog 4 |
|
| 12 |
Connect VDD to 3.3V DC |
|
| 13 |
Connect GROUND to common ground |
|
| 14 |
|
|
| 15 |
History |
|
| 16 |
======= |
|
| 17 |
2015/MAR/03 - First release (KTOWN) |
|
| 18 |
*/ |
|
| 19 |
|
|
| 20 |
/* Set the delay between fresh samples */ |
|
| 21 |
#define BNO055_SAMPLERATE_DELAY_MS (500) |
|
| 22 |
|
|
| 23 |
Adafruit_BNO055 bno = Adafruit_BNO055(); |
|
| 24 |
|
|
| 25 |
/**************************************************************************/ |
|
| 26 |
/* |
|
| 27 |
Arduino setup function (automatically called at startup) |
|
| 28 |
*/ |
|
| 29 |
/**************************************************************************/ |
|
| 30 |
void setup(void) |
|
| 31 |
{
|
|
| 32 |
Serial.begin(9600); |
|
| 33 |
Serial.println("Orientation Sensor Raw Data Test"); Serial.println("");
|
|
| 34 |
|
|
| 35 |
/* Initialise the sensor */ |
|
| 36 |
if(!bno.begin()) |
|
| 37 |
{
|
|
| 38 |
/* There was a problem detecting the BNO055 ... check your connections */ |
|
| 39 |
Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
|
|
| 40 |
while(1); |
|
| 41 |
} |
|
| 42 |
|
|
| 43 |
delay(1000); |
|
| 44 |
|
|
| 45 |
/* Display chip revision details (optional) */ |
|
| 46 |
bno.displayRevInfo(); |
|
| 47 |
Serial.println("");
|
|
| 48 |
} |
|
| 49 |
|
|
| 50 |
/**************************************************************************/ |
|
| 51 |
/* |
|
| 52 |
Arduino loop function, called once 'setup' is complete (your own code |
|
| 53 |
should go here) |
|
| 54 |
*/ |
|
| 55 |
/**************************************************************************/ |
|
| 56 |
void loop(void) |
|
| 57 |
{
|
|
| 58 |
// Possible vector values can be: |
|
| 59 |
// - VECTOR_ACCELEROMETER - m/s^2 |
|
| 60 |
// - VECTOR_MAGNETOMETER - uT |
|
| 61 |
// - VECTOR_GYROSCOPE - rad/s |
|
| 62 |
// - VECTOR_EULER - degrees |
|
| 63 |
// - VECTOR_LINEARACCEL - m/s^2 |
|
| 64 |
// - VECTOR_GRAVITY - m/s^2 |
|
| 65 |
imu::Vector<3> euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER); |
|
| 66 |
|
|
| 67 |
/* Display the floating point data */ |
|
| 68 |
Serial.print("X: ");
|
|
| 69 |
bno.printDouble(euler.x(), 1000); |
|
| 70 |
Serial.print("Y: ");
|
|
| 71 |
bno.printDouble(euler.y(), 1000); |
|
| 72 |
Serial.print("Z: ");
|
|
| 73 |
bno.printDouble(euler.z(), 1000); |
|
| 74 |
Serial.println("");
|
|
| 75 |
|
|
| 76 |
/* |
|
| 77 |
// Quaternion data |
|
| 78 |
imu::Quaternion quat = bno.getQuat(); |
|
| 79 |
Serial.print("qW: ");
|
|
| 80 |
bno.printDouble(quat.w(), 1000); |
|
| 81 |
Serial.print("qX: ");
|
|
| 82 |
bno.printDouble(quat.y(), 1000); |
|
| 83 |
Serial.print("qY: ");
|
|
| 84 |
bno.printDouble(quat.x(), 1000); |
|
| 85 |
Serial.print("qZ: ");
|
|
| 86 |
bno.printDouble(quat.z(), 1000); |
|
| 87 |
Serial.println("");
|
|
| 88 |
*/ |
|
| 89 |
|
|
| 90 |
delay(BNO055_SAMPLERATE_DELAY_MS); |
|
| 91 |
} |
|
| examples/sensorapi/sensorapi.ino | ||
|---|---|---|
| 78 | 78 |
displaySensorDetails(); |
| 79 | 79 |
|
| 80 | 80 |
/* Display system info (optional) */ |
| 81 |
bno.displaySystemStatus(); |
|
| 82 |
Serial.println("");
|
|
| 81 |
// bno.displaySystemStatus();
|
|
| 82 |
// Serial.println("");
|
|
| 83 | 83 |
|
| 84 | 84 |
/* Display chip revision details (optional) */ |
| 85 |
bno.displayRevInfo(); |
|
| 86 |
Serial.println("");
|
|
| 85 |
// bno.displayRevInfo();
|
|
| 86 |
// Serial.println("");
|
|
| 87 | 87 |
} |
| 88 | 88 |
|
| 89 | 89 |
/**************************************************************************/ |
| ... | ... | |
| 94 | 94 |
/**************************************************************************/ |
| 95 | 95 |
void loop(void) |
| 96 | 96 |
{
|
| 97 |
// Possible vector values can be: |
|
| 98 |
// - VECTOR_ACCELEROMETER - m/s^2 |
|
| 99 |
// - VECTOR_MAGNETOMETER - uT |
|
| 100 |
// - VECTOR_GYROSCOPE - rad/s |
|
| 101 |
// - VECTOR_EULER - degrees |
|
| 102 |
// - VECTOR_LINEARACCEL - m/s^2 |
|
| 103 |
// - VECTOR_GRAVITY - m/s^2 |
|
| 104 |
imu::Vector<3> euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER); |
|
| 97 |
/* Get a new sensor event */ |
|
| 98 |
sensors_event_t event; |
|
| 99 |
bno.getEvent(&event); |
|
| 100 |
|
|
| 101 |
/* Display the floating point data */ |
|
| 105 | 102 |
Serial.print("X: ");
|
| 106 |
Serial.println((int)euler.x(), DEC);
|
|
| 103 |
bno.printDouble(event.orientation.x, 1000);
|
|
| 107 | 104 |
Serial.print("Y: ");
|
| 108 |
Serial.println((int)euler.y(), DEC);
|
|
| 105 |
bno.printDouble(event.orientation.y, 1000);
|
|
| 109 | 106 |
Serial.print("Z: ");
|
| 110 |
Serial.println((int)euler.z(), DEC); |
|
| 111 |
Serial.println("");
|
|
| 112 |
|
|
| 113 |
/* |
|
| 114 |
imu::Quaternion quat = bno.getQuat(); |
|
| 115 |
Serial.print("qW: ");
|
|
| 116 |
Serial.println((int)quat.w(), DEC); |
|
| 117 |
Serial.print("qX: ");
|
|
| 118 |
Serial.println((int)quat.x(), DEC); |
|
| 119 |
Serial.print("qY: ");
|
|
| 120 |
Serial.println((int)quat.y(), DEC); |
|
| 121 |
Serial.print("qZ: ");
|
|
| 122 |
Serial.println((int)quat.z(), DEC); |
|
| 107 |
bno.printDouble(event.orientation.z, 1000); |
|
| 123 | 108 |
Serial.println("");
|
| 124 |
/* |
|
| 125 | 109 |
|
| 126 | 110 |
delay(BNO055_SAMPLERATE_DELAY_MS); |
| 127 | 111 |
} |
Also available in: Unified diff