36 |
36 |
|
37 |
37 |
/*!
|
38 |
38 |
* @brief Instantiates a new Adafruit_BNO055 class
|
|
39 |
* @param sensorID
|
|
40 |
* sensor ID
|
|
41 |
* @param address
|
|
42 |
* i2c address
|
39 |
43 |
*/
|
40 |
|
Adafruit_BNO055::Adafruit_BNO055() {}
|
|
44 |
Adafruit_BNO055::Adafruit_BNO055(int32_t sensorID, uint8_t address,
|
|
45 |
TwoWire *theWire) {
|
|
46 |
_sensorID = sensorID;
|
|
47 |
_address = address;
|
|
48 |
}
|
41 |
49 |
|
42 |
50 |
/*!
|
43 |
51 |
* @brief Sets up the HW
|
... | ... | |
56 |
64 |
* OPERATION_MODE_M4G,
|
57 |
65 |
* OPERATION_MODE_NDOF_FMC_OFF,
|
58 |
66 |
* OPERATION_MODE_NDOF]
|
59 |
|
* @param *theWire
|
60 |
|
* Wire object
|
61 |
67 |
* @return true if process is successful
|
62 |
68 |
*/
|
63 |
|
bool Adafruit_BNO055::begin() {
|
64 |
|
_wire = &Wire;
|
65 |
|
#if defined(ARDUINO_SAMD_ZERO) && !(ARDUINO_SAMD_FEATHER_M0)
|
|
69 |
bool Adafruit_BNO055::begin(adafruit_bno055_opmode_t mode) {
|
|
70 |
#if defined(ARDUINO_SAMD_ZERO) && (_address == BNO055_ADDRESS_A)
|
66 |
71 |
#error \
|
67 |
72 |
"On an arduino Zero, BNO055's ADR pin must be high. Fix that, then delete this line."
|
68 |
73 |
_address = BNO055_ADDRESS_B;
|
69 |
|
#else
|
70 |
|
_address = BNO055_ADDRESS_A;
|
71 |
74 |
#endif
|
72 |
75 |
|
73 |
|
return init(OPERATION_MODE_NDOF);
|
74 |
|
}
|
75 |
|
|
76 |
|
/*!
|
77 |
|
* @brief Sets up the HW
|
78 |
|
* @param mode
|
79 |
|
* mode values
|
80 |
|
* [OPERATION_MODE_CONFIG,
|
81 |
|
* OPERATION_MODE_ACCONLY,
|
82 |
|
* OPERATION_MODE_MAGONLY,
|
83 |
|
* OPERATION_MODE_GYRONLY,
|
84 |
|
* OPERATION_MODE_ACCMAG,
|
85 |
|
* OPERATION_MODE_ACCGYRO,
|
86 |
|
* OPERATION_MODE_MAGGYRO,
|
87 |
|
* OPERATION_MODE_AMG,
|
88 |
|
* OPERATION_MODE_IMUPLUS,
|
89 |
|
* OPERATION_MODE_COMPASS,
|
90 |
|
* OPERATION_MODE_M4G,
|
91 |
|
* OPERATION_MODE_NDOF_FMC_OFF,
|
92 |
|
* OPERATION_MODE_NDOF]
|
93 |
|
* @param *theWire
|
94 |
|
* Wire object
|
95 |
|
* @return true if process is successful
|
96 |
|
*/
|
97 |
|
bool Adafruit_BNO055::begin(adafruit_bno055_opmode_t mode, uint8_t address,
|
98 |
|
TwoWire *theWire) {
|
99 |
|
_wire = theWire;
|
100 |
|
_address = address;
|
101 |
|
|
102 |
|
return init(mode);
|
103 |
|
}
|
104 |
|
|
105 |
|
bool Adafruit_BNO055::init(adafruit_bno055_opmode_t mode) {
|
106 |
76 |
/* Enable I2C */
|
107 |
77 |
_wire->begin();
|
108 |
78 |
|
109 |
|
/* BNO055 clock stretches for 500us or more! */
|
|
79 |
// BNO055 clock stretches for 500us or more!
|
110 |
80 |
#ifdef ESP8266
|
111 |
|
/* Allow for 1000us of clock stretching */
|
112 |
|
<<<<<<< HEAD
|
113 |
|
_wire->setClockStretchLimit(1000);
|
114 |
|
=======
|
115 |
|
Wire.setClockStretchLimit(1000);
|
116 |
|
>>>>>>> 75f03d2e1fd440e7febc0de8c47a52bab09c51b0
|
|
81 |
_wire->setClockStretchLimit(1000); // Allow for 1000us of clock stretching
|
117 |
82 |
#endif
|
118 |
83 |
|
119 |
84 |
/* Make sure we have the right device */
|
120 |
85 |
uint8_t id = read8(BNO055_CHIP_ID_ADDR);
|
121 |
86 |
if (id != BNO055_ID) {
|
122 |
|
/* hold on for boot */
|
123 |
|
delay(1000);
|
|
87 |
delay(1000); // hold on for boot
|
124 |
88 |
id = read8(BNO055_CHIP_ID_ADDR);
|
125 |
89 |
if (id != BNO055_ID) {
|
126 |
|
/* still not? ok bail */
|
127 |
|
return false;
|
|
90 |
return false; // still not? ok bail
|
128 |
91 |
}
|
129 |
92 |
}
|
130 |
93 |
|
... | ... | |
144 |
107 |
|
145 |
108 |
write8(BNO055_PAGE_ID_ADDR, 0);
|
146 |
109 |
|
147 |
|
/* Set the output units
|
148 |
|
uint8_t unitsel = (0 << 7) | // Orientation = Android
|
149 |
|
(0 << 4) | // Temperature = Celsius
|
150 |
|
(0 << 2) | // Euler = Degrees
|
151 |
|
(1 << 1) | // Gyro = Rads
|
152 |
|
(0 << 0); // Accelerometer = m/s^2
|
153 |
|
write8(BNO055_UNIT_SEL_ADDR, unitsel);
|
154 |
|
*/
|
|
110 |
/* Set the output units */
|
|
111 |
/*
|
|
112 |
uint8_t unitsel = (0 << 7) | // Orientation = Android
|
|
113 |
(0 << 4) | // Temperature = Celsius
|
|
114 |
(0 << 2) | // Euler = Degrees
|
|
115 |
(1 << 1) | // Gyro = Rads
|
|
116 |
(0 << 0); // Accelerometer = m/s^2
|
|
117 |
write8(BNO055_UNIT_SEL_ADDR, unitsel);
|
|
118 |
*/
|
155 |
119 |
|
156 |
120 |
/* Configure axis mapping (see section 3.4) */
|
|
121 |
/*
|
|
122 |
write8(BNO055_AXIS_MAP_CONFIG_ADDR, REMAP_CONFIG_P2); // P0-P7, Default is P1
|
|
123 |
delay(10);
|
|
124 |
write8(BNO055_AXIS_MAP_SIGN_ADDR, REMAP_SIGN_P2); // P0-P7, Default is P1
|
|
125 |
delay(10);
|
|
126 |
*/
|
|
127 |
|
157 |
128 |
write8(BNO055_SYS_TRIGGER_ADDR, 0x0);
|
158 |
129 |
delay(10);
|
159 |
130 |
/* Set the requested operating mode (see section 3.3) */
|