39#if !defined(USE_I2C_INTERFACE) && !defined(USE_SPI_INTERFACE)
40#define USE_I2C_INTERFACE
41#warning "No interface type is selected, use I2C interface"
44#if defined(USE_SPI_INTERFACE)
94#define USING_DATA_HELPER
96#ifdef USING_DATA_HELPER
102#define BOSCH_APP30_SHUTTLE_BHI260_AUX_BMM150FW
132#define USING_SENSOR_IRQ_METHOD
135#ifdef USING_SENSOR_IRQ_METHOD
144#ifndef USING_DATA_HELPER
145void parse_euler(uint8_t sensor_id,
const uint8_t *data_ptr, uint32_t len, uint64_t *
timestamp,
void *user_data)
147 struct bhy2_data_orientation data;
151 bhy2_parse_orientation(data_ptr, &data);
153 BoschSensorUtils::time_to_s_ns(_timestamp, &s, &ns, &tns);
154 uint8_t accuracy =
bhy.getAccuracy();
156 Serial.print(
" T:"); Serial.print(s);
157 Serial.print(
"."); Serial.print(ns);
158 Serial.print(
" R:"); Serial.print(data.roll * 360.0f / 32768.0f);
159 Serial.print(
" P:"); Serial.print(data.pitch * 360.0f / 32768.0f);
160 Serial.print(
" H:"); Serial.print(data.heading * 360.0f / 32768.0f);
161 Serial.print(
" A:"); Serial.println(accuracy);
163 Serial.print(
" T:"); Serial.print(s);
164 Serial.print(
"."); Serial.print(ns);
165 Serial.print(
" R:"); Serial.print(data.roll * 360.0f / 32768.0f);
166 Serial.print(
" P:"); Serial.print(data.pitch * 360.0f / 32768.0f);
167 Serial.print(
" H:"); Serial.println(data.heading * 360.0f / 32768.0f);
175 float progress = (float)transferred / total * 100;
176 Serial.print(
"Upload progress: ");
177 Serial.print(progress);
183 Serial.begin(115200);
189 Serial.println(
"Initializing Sensors...");
206#ifdef USE_I2C_INTERFACE
211 Serial.print(
"Failed to initialize sensor - error code:");
212 Serial.println(
bhy.getError());
219#ifdef USE_SPI_INTERFACE
222 Serial.print(
"Failed to initialize sensor - error code:");
223 Serial.println(
bhy.getError());
230 Serial.println(
"Initializing the sensor successfully!");
233 BoschSensorInfo info =
bhy.getSensorInfo();
236 ArduinoStreamPrinter printer(Serial);
237 info.printInfo(printer);
239 info.printInfo([](
const char *format, ...) ->
int {
241 va_start(args, format);
242 int result = vprintf(format, args);
248 float sample_rate = 100.0;
249 uint32_t report_latency_ms = 0;
256#ifdef USING_DATA_HELPER
257 euler.enable(sample_rate, report_latency_ms);
259 bhy.configure(BoschSensorID::ORIENTATION_WAKE_UP, sample_rate, report_latency_ms);
261 bhy.onResultEvent(BoschSensorID::ORIENTATION_WAKE_UP, parse_euler);
264#ifdef USING_SENSOR_IRQ_METHOD
279#ifdef USING_SENSOR_IRQ_METHOD
289#ifdef USING_SENSOR_IRQ_METHOD
293#ifdef USING_DATA_HELPER
294 if (
euler.hasUpdated()) {
296 Serial.print(
euler.getRoll());
300 Serial.print(
euler.getPitch());
304 Serial.println(
euler.getHeading());
volatile bool isInterruptTriggered
void progress_callback(uint32_t total, uint32_t transferred, void *user_data)
bool force_update_flash_firmware
void setBootFromFlash(bool boot_from_flash)
setBootFromFlash