BNO055支持串口及IIC通信两种通信模式,本文介绍单片机串口与BNO055通信。
本文完整keil工程下载链接:BNO055+STM32F429串口读取数据-嵌入式文档类资源-CSDN下载
IIC通信文章链接:BNO055数据读取之一:IIC_pwbhbh的博客-CSDN博客
BNO055的串口通信设置比较简单,参考手册资料:波特率115200,8位数据位,1位停止位,无校验,都是常见的串口配置。手册对读、写命令、数据返回、错误返回有着明确说明,就不再赘述了。
代码编写:
1、首先基于stm32F429建立一个串口通信工程,我的是基于标准库的。
2、编写bno055的初始化、数据读取代码:
bno055_api.c内主要为bno055的初始化函数 BNO055_Init()
三组传感器数据读取函数:
Read_BNO005_ACC(struct bno055_accel_t* acc)
Read_BNO005_MAG(struct bno055_mag_t* mag)
void Read_BNO005_GYRO(struct bno055_gyro_t* gyro)
bno055_api.c:
#include "bno055_api.h"
#include "bno055_usart.h"
#include "delay.h"
struct bno055_gyro_t gyroData;
struct bno055_accel_t accData;
u8 Read_Cmd[4]={0xAA,0x01,0,6};
u8 Write_Cmd[5]={0xAA,0x00,0x00,0x01,0x00};
#define Writereg Write_Cmd[2]
#define Writedat Write_Cmd[4]
struct bno055_accel_t ACC;
struct bno055_mag_t MAG;
struct bno055_gyro_t GYRO;
void Read_BNO005_ACC(struct bno055_accel_t* acc)
{
Read_Cmd[2] = BNO055_ACCEL_DATA_X_LSB_ADDR;
BNO055_USART_Send_length(Read_Cmd,4);
delay_ms(100);
if(BNO055_USART_REC_LEN)
{
if(BNO055_USART_REC[0]==0xBB)
{
acc->x = BNO055_USART_REC[3]<<8 | BNO055_USART_REC[2];
acc->y = BNO055_USART_REC[5]<<8 | BNO055_USART_REC[4];
acc->z = BNO055_USART_REC[7]<<8 | BNO055_USART_REC[6];
printf("ACC:X=%d,Y=%d,Z=%d\r\n",acc->x,acc->y,acc->z);
}
BNO055_USART_REC_LEN = 0;
}
}
void Read_BNO005_MAG(struct bno055_mag_t* mag)
{
Read_Cmd[2] = BNO055_MAG_DATA_X_LSB_ADDR;
BNO055_USART_Send_length(Read_Cmd,4);
delay_ms(100);
if(BNO055_USART_REC_LEN)
{
if(BNO055_USART_REC[0]==0xBB)
{
mag->x = BNO055_USART_REC[3]<<8 | BNO055_USART_REC[2];
mag->y = BNO055_USART_REC[5]<<8 | BNO055_USART_REC[4];
mag->z = BNO055_USART_REC[7]<<8 | BNO055_USART_REC[6];
printf("MAG:X=%d,Y=%d,Z=%d\r\n",mag->x,mag->y,mag->z);
}
BNO055_USART_REC_LEN = 0;
}
}
void Read_BNO005_GYRO(struct bno055_gyro_t* gyro)
{
Read_Cmd[2] = BNO055_ACCEL_DATA_X_LSB_ADDR;
BNO055_USART_Send_length(Read_Cmd,4);
delay_ms(100);
if(BNO055_USART_REC_LEN)
{
if(BNO055_USART_REC[0]==0xBB)
{
gyro->x = BNO055_USART_REC[3]<<8 | BNO055_USART_REC[2];
gyro->y = BNO055_USART_REC[5]<<8 | BNO055_USART_REC[4];
gyro->z = BNO055_USART_REC[7]<<8 | BNO055_USART_REC[6];
printf("GYR:X=%d,Y=%d,Z=%d\r\n",gyro->x,gyro->y,gyro->z);
}
BNO055_USART_REC_LEN = 0;
}
}
void BNOPrint(void)
{
delay_ms(300); //ÑÓʱʱ¼ä½÷É÷ÐÞ¸Ä
if(BNO055_USART_REC_LEN)
{
for(u8 i = 0; i < BNO055_USART_REC_LEN; i++)
printf("%02X ",BNO055_USART_REC[i]);
printf("\r\n");
BNO055_USART_REC_LEN = 0;
}
}
void BNO055_Init(void)
{
BNO055_USART_Config(); //ÅäÖô®¿Ú
Writereg = BNO055_SYS_TRIGGER_ADDR; //¸´Î»
Writedat = BNO055_SYS_RST;
BNO055_USART_Send_length(Write_Cmd,5);
delay_ms(500);
BNOPrint();
Writereg = BNO055_OPR_MODE_ADDR; //½øÈëÅäÖÃģʽ
Writedat = BNO055_OPERATION_MODE_CONFIG;
BNO055_USART_Send_length(Write_Cmd,5);
BNOPrint();
//ÅäÖù¤×÷ģʽ
Writereg = BNO055_PAGE_ID_ADDR; //page id
Writedat = BNO055_PAGE_0;
BNO055_USART_Send_length(Write_Cmd,5);
BNOPrint();
Writereg = BNO055_PWR_MODE_ADDR; //power mode
Writedat = BNO055_POWER_MODE_NORMAL;
BNO055_USART_Send_length(Write_Cmd,5);
BNOPrint();
Writereg = BNO055_SYS_TRIGGER_ADDR; //sys trigger id
Writedat = BNO055_INTR_NORST;
BNO055_USART_Send_length(Write_Cmd,5);
BNOPrint();
//ÅäÖüĴæÆ÷
Writereg = BNO055_PAGE_ID_ADDR; //page id
Writedat = BNO055_PAGE_1;
BNO055_USART_Send_length(Write_Cmd,5);
BNOPrint();
Writereg = BNO055_ACCEL_CONFIG_ADDR; //ACC config
Writedat = BNO055_ACCEL_RANGE_4G;
BNO055_USART_Send_length(Write_Cmd,5);
BNOPrint();
Writereg = BNO055_MAG_CONFIG_ADDR; //Mag config
Writedat = BNO055_MAG_DATA_OUTRATE_20HZ;
BNO055_USART_Send_length(Write_Cmd,5);
BNOPrint();
Writereg = BNO055_GYRO_CONFIG_ADDR; //GYRO config
Writedat = BNO055_GYRO_RANGE_2000DPS;
BNO055_USART_Send_length(Write_Cmd,5);
BNOPrint();
Writereg = BNO055_GYRO_MODE_CONFIG_ADDR;//GYRO config
Writedat = BNO055_GYRO_POWER_MODE_NORMAL;
BNO055_USART_Send_length(Write_Cmd,5);
BNOPrint();
Writereg = BNO055_PAGE_ID_ADDR; //page id
Writedat = BNO055_PAGE_0;
BNO055_USART_Send_length(Write_Cmd,5);
BNOPrint();
Writereg = BNO055_OPR_MODE_ADDR; //opration_mode
Writedat = BNO055_OPERATION_MODE_NDOF;
BNO055_USART_Send_length(Write_Cmd,5);
BNOPrint();
}
bno055_api.h
#ifndef __BNO055_API_H
#define __BNO055_API_H
#include "sys.h"
/* PAGE0 CONFIG REGISTERS START*/
/* Page id register definition and Value*/
#define BNO055_PAGE_ID_ADDR (0X07)
#define BNO055_PAGE_0 (0X00)
#define BNO055_PAGE_1 (0X01)
/* PWR_Mode registers and Value*/
#define BNO055_PWR_MODE_ADDR (0X3E)
#define BNO055_POWER_MODE_NORMAL (0X00)
#define BNO055_POWER_MODE_LOWPOWER (0X01)
#define BNO055_POWER_MODE_SUSPEND (0X02)
/* OPR_Mode registers and Value*/
#define BNO055_OPR_MODE_ADDR (0X3D)
#define BNO055_OPERATION_MODE_CONFIG (0X00)
#define BNO055_OPERATION_MODE_ACCONLY (0X01)
#define BNO055_OPERATION_MODE_MAGONLY (0X02)
#define BNO055_OPERATION_MODE_GYRONLY (0X03)
#define BNO055_OPERATION_MODE_ACCMAG (0X04)
#define BNO055_OPERATION_MODE_ACCGYRO (0X05)
#define BNO055_OPERATION_MODE_MAGGYRO (0X06)
#define BNO055_OPERATION_MODE_AMG (0X07)
#define BNO055_OPERATION_MODE_IMUPLUS (0X08)
#define BNO055_OPERATION_MODE_COMPASS (0X09)
#define BNO055_OPERATION_MODE_M4G (0X0A)
#define BNO055_OPERATION_MODE_NDOF_FMC_OFF (0X0B)
#define BNO055_OPERATION_MODE_NDOF (0X0C)
/* SYS_TRIGGER registers and Value*/
#define BNO055_SYS_TRIGGER_ADDR (0X3F)
#define BNO055_SYS_RST (0X20)
#define BNO055_INTR_RST (0X40)
#define BNO055_INTR_NORST (0X00)
/* Unit selection register and Value*/
#define BNO055_UNIT_SEL_ADDR (0X3B)
/*Accel unit*/
#define BNO055_ACCEL_UNIT_MSQ (0x00)
#define BNO055_ACCEL_UNIT_MG (0x01)
/*Gyro unit*/
#define BNO055_GYRO_UNIT_DPS (0x00)
#define BNO055_GYRO_UNIT_RPS (0x02)
/* Euler unit*/
#define BNO055_EULER_UNIT_DEG (0x00)
#define BNO055_EULER_UNIT_RAD (0x04)
/*Temperature unit*/
#define BNO055_TEMP_UNIT_CELSIUS (0x00)
#define BNO055_TEMP_UNIT_FAHRENHEIT (0x10)
/* TEMP_SOURCE register and Value*/
#define BNO055_TEMP_SOURCE_ADDR (0X40)
/* Enable the temperature source */
#define BNO055_ACCEL_TEMP_EN (0x00)
#define BNO055_GYRO_TEMP_EN (0x01)
#define BNO055_MCU_TEMP_EN (0x03)
/* PAGE0 REGISTERS DEFINITION END*/
/* PAGE1 CONFIG REGISTERS DEFINITION*/
/* ACCEL CONFIG register and Value*/
#define BNO055_ACCEL_CONFIG_ADDR (0X08)
/* Accel Range */
#define BNO055_ACCEL_RANGE_2G (0X00)
#define BNO055_ACCEL_RANGE_4G (0X01)
#define BNO055_ACCEL_RANGE_8G (0X02)
#define BNO055_ACCEL_RANGE_16G (0X03)
/* Accel Bandwidth*/
#define BNO055_ACCEL_BW_7_81HZ (0x00 << 2)
#define BNO055_ACCEL_BW_15_63HZ (0x01 << 2)
#define BNO055_ACCEL_BW_31_25HZ (0x02 << 2)
#define BNO055_ACCEL_BW_62_5HZ (0X03 << 2)
#define BNO055_ACCEL_BW_125HZ (0X04 << 2)
#define BNO055_ACCEL_BW_250HZ (0X05 << 2)
#define BNO055_ACCEL_BW_500HZ (0X06 << 2)
#define BNO055_ACCEL_BW_1000HZ (0X07 << 2)
/* Accel Power mode*/
#define BNO055_ACCEL_NORMAL (0X00 << 5)
#define BNO055_ACCEL_SUSPEND (0X01 << 5)
#define BNO055_ACCEL_LOWPOWER_1 (0X02 << 5)
#define BNO055_ACCEL_STANDBY (0X03 << 5)
#define BNO055_ACCEL_LOWPOWER_2 (0X04 << 5)
#define BNO055_ACCEL_DEEPSUSPEND (0X05 << 5)
/* MAG CONFIG register and Value*/
#define BNO055_MAG_CONFIG_ADDR (0X09)
/* Mag data output rate*/
#define BNO055_MAG_DATA_OUTRATE_2HZ (0X00)
#define BNO055_MAG_DATA_OUTRATE_6HZ (0X01)
#define BNO055_MAG_DATA_OUTRATE_8HZ (0X02)
#define BNO055_MAG_DATA_OUTRATE_10HZ (0X03)
#define BNO055_MAG_DATA_OUTRATE_15HZ (0X04)
#define BNO055_MAG_DATA_OUTRATE_20HZ (0X05)
#define BNO055_MAG_DATA_OUTRATE_25HZ (0X06)
#define BNO055_MAG_DATA_OUTRATE_30HZ (0X07)
/* Mag Operation mode*/
#define BNO055_MAG_OPERATION_MODE_LOWPOWER (0X00 << 3)
#define BNO055_MAG_OPERATION_MODE_REGULAR (0X01 << 3)
#define BNO055_MAG_OPERATION_MODE_ENHANCED_REGULAR (0X02 << 3)
#define BNO055_MAG_OPERATION_MODE_HIGH_ACCURACY (0X03 << 3)
/* Mag power mode*/
#define BNO055_MAG_POWER_MODE_NORMAL (0X00 << 5)
#define BNO055_MAG_POWER_MODE_SLEEP (0X01 << 5)
#define BNO055_MAG_POWER_MODE_SUSPEND (0X02 << 5)
#define BNO055_MAG_POWER_MODE_FORCE_MODE (0X03 << 5)
/* GYRO CONFIG register0 and Value*/
#define BNO055_GYRO_CONFIG_ADDR (0X0A)
/* Gyro range*/
#define BNO055_GYRO_RANGE_2000DPS (0x00)
#define BNO055_GYRO_RANGE_1000DPS (0x01)
#define BNO055_GYRO_RANGE_500DPS (0x02)
#define BNO055_GYRO_RANGE_250DPS (0x03)
#define BNO055_GYRO_RANGE_125DPS (0x04)
/* Gyro Bandwidth*/
#define BNO055_GYRO_BW_523HZ (0x00 << 3)
#define BNO055_GYRO_BW_230HZ (0x01 << 3)
#define BNO055_GYRO_BW_116HZ (0x02 << 3)
#define BNO055_GYRO_BW_47HZ (0x03 << 3)
#define BNO055_GYRO_BW_23HZ (0x04 << 3)
#define BNO055_GYRO_BW_12HZ (0x05 << 3)
#define BNO055_GYRO_BW_64HZ (0x06 << 3)
#define BNO055_GYRO_BW_32HZ (0x07 << 3)
/* GYRO CONFIG register1 and Value*/
#define BNO055_GYRO_MODE_CONFIG_ADDR (0X0B)
/* Gyro power mode*/
#define BNO055_GYRO_POWER_MODE_NORMAL (0X00)
#define BNO055_GYRO_POWER_MODE_FASTPOWERUP (0X01)
#define BNO055_GYRO_POWER_MODE_DEEPSUSPEND (0X02)
#define BNO055_GYRO_POWER_MODE_SUSPEND (0X03)
#define BNO055_GYRO_POWER_MODE_ADVANCE_POWERSAVE (0X04)
/* ACC_SLEEP CONFIG register1 and Value*/
#define BNO055_ACCEL_SLEEP_CONFIG_ADDR (0X0C)
#define BNO055_ACCEL_SLEEP_MODE_EVENT (0X00)
#define BNO055_ACCEL_SLEEP_MODE_EQUI (0X01)
/* Accel Sleep Duration */
#define BNO055_ACCEL_SLEEP_DURN_0_5MS (0x05 << 1)
/* sets sleep duration to 0.5 ms */
#define BNO055_ACCEL_SLEEP_DURN_1MS (0x06 << 1)
/* sets sleep duration to 1 ms */
#define BNO055_ACCEL_SLEEP_DURN_2MS (0x07 << 1)
/* sets sleep duration to 2 ms */
#define BNO055_ACCEL_SLEEP_DURN_4MS (0x08 << 1)
/* sets sleep duration to 4 ms */
#define BNO055_ACCEL_SLEEP_DURN_6MS (0x09 << 1)
/* sets sleep duration to 6 ms*/
#define BNO055_ACCEL_SLEEP_DURN_10MS (0x0A << 1)
/* sets sleep duration to 10 ms */
#define BNO055_ACCEL_SLEEP_DURN_25MS (0x0B << 1)
/* sets sleep duration to 25 ms */
#define BNO055_ACCEL_SLEEP_DURN_50MS (0x0C << 1)
/* sets sleep duration to 50 ms */
#define BNO055_ACCEL_SLEEP_DURN_100MS (0x0D << 1)
/* sets sleep duration to 100 ms */
#define BNO055_ACCEL_SLEEP_DURN_500MS (0x0E << 1)
/* sets sleep duration to 500 ms */
#define BNO055_ACCEL_SLEEP_DURN_1S (0x0F << 1)
/* GYRO_SLEEP CONFIG register1 and Value*/
#define BNO055_GYRO_SLEEP_CONFIG_ADDR (0X0D)
#define BNO055_GYRO_No_AUTOSLPDUR (0x00 << 3)
#define BNO055_GYRO_4MS_AUTOSLPDUR (0x01 << 3)
#define BNO055_GYRO_5MS_AUTOSLPDUR (0x02 << 3)
#define BNO055_GYRO_8MS_AUTOSLPDUR (0x03 << 3)
#define BNO055_GYRO_10MS_AUTOSLPDUR (0x04 << 3)
#define BNO055_GYRO_15MS_AUTOSLPDUR (0x05 << 3)
#define BNO055_GYRO_20MS_AUTOSLPDUR (0x06 << 3)
#define BNO055_GYRO_40MS_AUTOSLPDUR (0x07 << 3)
/* Interrupt registers*/
#define BNO055_INT_MASK_ADDR (0X0F)
#define BNO055_INT_ADDR (0X10)
#define BNO055_ACCEL_ANY_MOTION_THRES_ADDR (0X11)
#define BNO055_ACCEL_INTR_SETTINGS_ADDR (0X12)
#define BNO055_ACCEL_HIGH_G_DURN_ADDR (0X13)
#define BNO055_ACCEL_HIGH_G_THRES_ADDR (0X14)
#define BNO055_ACCEL_NO_MOTION_THRES_ADDR (0X15)
#define BNO055_ACCEL_NO_MOTION_SET_ADDR (0X16)
#define BNO055_GYRO_INTR_SETING_ADDR (0X17)
#define BNO055_GYRO_HIGHRATE_X_SET_ADDR (0X18)
#define BNO055_GYRO_DURN_X_ADDR (0X19)
#define BNO055_GYRO_HIGHRATE_Y_SET_ADDR (0X1A)
#define BNO055_GYRO_DURN_Y_ADDR (0X1B)
#define BNO055_GYRO_HIGHRATE_Z_SET_ADDR (0X1C)
#define BNO055_GYRO_DURN_Z_ADDR (0X1D)
#define BNO055_GYRO_ANY_MOTION_THRES_ADDR (0X1E)
#define BNO055_GYRO_ANY_MOTION_SET_ADDR (0X1F)
/* PAGE0 REGISTER DEFINITION START*/
#define BNO055_CHIP_ID_ADDR (0x00)
#define BNO055_ACCEL_REV_ID_ADDR (0x01)
#define BNO055_MAG_REV_ID_ADDR (0x02)
#define BNO055_GYRO_REV_ID_ADDR (0x03)
#define BNO055_SW_REV_ID_LSB_ADDR (0x04)
#define BNO055_SW_REV_ID_MSB_ADDR (0x05)
#define BNO055_BL_REV_ID_ADDR (0X06)
/* Accel data register*/
#define BNO055_ACCEL_DATA_X_LSB_ADDR (0X08)
#define BNO055_ACCEL_DATA_X_MSB_ADDR (0X09)
#define BNO055_ACCEL_DATA_Y_LSB_ADDR (0X0A)
#define BNO055_ACCEL_DATA_Y_MSB_ADDR (0X0B)
#define BNO055_ACCEL_DATA_Z_LSB_ADDR (0X0C)
#define BNO055_ACCEL_DATA_Z_MSB_ADDR (0X0D)
/*Mag data register*/
#define BNO055_MAG_DATA_X_LSB_ADDR (0X0E)
#define BNO055_MAG_DATA_X_MSB_ADDR (0X0F)
#define BNO055_MAG_DATA_Y_LSB_ADDR (0X10)
#define BNO055_MAG_DATA_Y_MSB_ADDR (0X11)
#define BNO055_MAG_DATA_Z_LSB_ADDR (0X12)
#define BNO055_MAG_DATA_Z_MSB_ADDR (0X13)
/*Gyro data registers*/
#define BNO055_GYRO_DATA_X_LSB_ADDR (0X14)
#define BNO055_GYRO_DATA_X_MSB_ADDR (0X15)
#define BNO055_GYRO_DATA_Y_LSB_ADDR (0X16)
#define BNO055_GYRO_DATA_Y_MSB_ADDR (0X17)
#define BNO055_GYRO_DATA_Z_LSB_ADDR (0X18)
#define BNO055_GYRO_DATA_Z_MSB_ADDR (0X19)
/*Euler data registers*/
#define BNO055_EULER_H_LSB_ADDR (0X1A)
#define BNO055_EULER_H_MSB_ADDR (0X1B)
#define BNO055_EULER_R_LSB_ADDR (0X1C)
#define BNO055_EULER_R_MSB_ADDR (0X1D)
#define BNO055_EULER_P_LSB_ADDR (0X1E)
#define BNO055_EULER_P_MSB_ADDR (0X1F)
/*Quaternion data registers*/
#define BNO055_QUATERNION_DATA_W_LSB_ADDR (0X20)
#define BNO055_QUATERNION_DATA_W_MSB_ADDR (0X21)
#define BNO055_QUATERNION_DATA_X_LSB_ADDR (0X22)
#define BNO055_QUATERNION_DATA_X_MSB_ADDR (0X23)
#define BNO055_QUATERNION_DATA_Y_LSB_ADDR (0X24)
#define BNO055_QUATERNION_DATA_Y_MSB_ADDR (0X25)
#define BNO055_QUATERNION_DATA_Z_LSB_ADDR (0X26)
#define BNO055_QUATERNION_DATA_Z_MSB_ADDR (0X27)
/* Linear acceleration data registers*/
#define BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR (0X28)
#define BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR (0X29)
#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR (0X2A)
#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR (0X2B)
#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR (0X2C)
#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR (0X2D)
/*Gravity data registers*/
#define BNO055_GRAVITY_DATA_X_LSB_ADDR (0X2E)
#define BNO055_GRAVITY_DATA_X_MSB_ADDR (0X2F)
#define BNO055_GRAVITY_DATA_Y_LSB_ADDR (0X30)
#define BNO055_GRAVITY_DATA_Y_MSB_ADDR (0X31)
#define BNO055_GRAVITY_DATA_Z_LSB_ADDR (0X32)
#define BNO055_GRAVITY_DATA_Z_MSB_ADDR (0X33)
/* Temperature data register*/
#define BNO055_TEMP_ADDR (0X34)
/* Status registers*/
#define BNO055_CALIB_STAT_ADDR (0X35)
#define BNO055_SELFTEST_RESULT_ADDR (0X36)
#define BNO055_INTR_STAT_ADDR (0X37)
#define BNO055_SYS_CLK_STAT_ADDR (0X38)
#define BNO055_SYS_STAT_ADDR (0X39)
#define BNO055_SYS_ERR_ADDR (0X3A)
/* Unit selection register*/
#define BNO055_UNIT_SEL_ADDR (0X3B)
#define BNO055_DATA_SELECT_ADDR (0X3C)
/* Mode registers*/
#define BNO055_OPR_MODE_ADDR (0X3D)
#define BNO055_PWR_MODE_ADDR (0X3E)
#define BNO055_SYS_TRIGGER_ADDR (0X3F)
#define BNO055_TEMP_SOURCE_ADDR (0X40)
/* Axis remap registers*/
#define BNO055_AXIS_MAP_CONFIG_ADDR (0X41)
#define BNO055_AXIS_MAP_SIGN_ADDR (0X42)
/* Radius registers*/
#define BNO055_ACCEL_RADIUS_LSB_ADDR (0X67)
#define BNO055_ACCEL_RADIUS_MSB_ADDR (0X68)
#define BNO055_MAG_RADIUS_LSB_ADDR (0X69)
#define BNO055_MAG_RADIUS_MSB_ADDR (0X6A)
struct bno055_accel_t
{
short x; /**< accel x data */
short y; /**< accel y data */
short z; /**< accel z data */
};
/*!
* @brief struct for Mag data read from registers
*/
struct bno055_mag_t
{
short x; /**< mag x data */
short y; /**< mag y data */
short z; /**< mag z data */
};
/*!
* @brief struct for Gyro data read from registers
*/
struct bno055_gyro_t
{
short x; /**< gyro x data */
short y; /**< gyro y data */
short z; /**< gyro z data */
};
/*!
* @brief struct for Euler data read from registers
*/
struct bno055_euler_t
{
short h; /**< Euler h data */
short r; /**< Euler r data */
short p; /**< Euler p data */
};
/*!
* @brief struct for Quaternion data read from registers
*/
struct bno055_quaternion_t
{
short w; /**< Quaternion w data */
short x; /**< Quaternion x data */
short y; /**< Quaternion y data */
short z; /**< Quaternion z data */
};
/*!
* @brief struct for Linear Accel data read from registers
*/
struct bno055_linear_accel_t
{
short x; /**< Linear Accel x data */
short y; /**< Linear Accel y data */
short z; /**< Linear Accel z data */
};
/*!
* @brief struct for Gravity data read from registers
*/
struct bno055_gravity_t
{
short x; /**< Gravity x data */
short y; /**< Gravity y data */
short z; /**< Gravity z data */
};
/*!
* @brief struct for Accel-output data of precision double
*/
struct bno055_accel_double_t
{
double x; /**< Accel x double data */
double y; /**< Accel y double data */
double z; /**< Accel z double data */
};
/*!
* @brief struct for Mag-output data of precision double
*/
struct bno055_mag_double_t
{
double x; /**< Mag x double data */
double y; /**< Mag y double data */
double z; /**< Mag z double data */
};
/*!
* @brief struct for Gyro-output data of precision double
*/
struct bno055_gyro_double_t
{
double x; /**< Gyro x double data */
double y; /**< Gyro y double data */
double z; /**< Gyro z double data */
};
/*!
* @brief struct for Euler-output data of precision double
*/
struct bno055_euler_double_t
{
double h; /**< Euler h double data */
double r; /**< Euler r double data */
double p; /**< Euler p double data */
};
/*!
* @brief struct for Linear Accel-output data of precision double
*/
struct bno055_linear_accel_double_t
{
double x; /**< linear accel x double data */
double y; /**< linear accel y double data */
double z; /**< linear accel z double data */
};
/*!
* @brief struct for Gravity-output data of precision double
*/
struct bno055_gravity_double_t
{
double x; /**< Gravity x double data */
double y; /**< Gravity y double data */
double z; /**< Gravity z double data */
};
/*!
* @brief struct for Accel-output data of precision float
*/
struct bno055_accel_float_t
{
float x; /**< accel x float data */
float y; /**< accel y float data */
float z; /**< accel z float data */
};
/*!
* @brief struct for Mag-output data of precision float
*/
struct bno055_mag_float_t
{
float x; /**< Mag x float data */
float y; /**< Mag y float data */
float z; /**< Mag z float data */
};
/*!
* @brief struct for Gyro-output data of precision float
*/
struct bno055_gyro_float_t
{
float x; /**< Gyro x float data */
float y; /**< Gyro y float data */
float z; /**< Gyro z float data */
};
/*!
* @brief struct for Euler-output data of precision float
*/
struct bno055_euler_float_t
{
float h; /**< Euler h float data */
float r; /**< Euler r float data */
float p; /**< Euler p float data */
};
/*!
* @brief struct for Linear accel-output data of precision float
*/
struct bno055_linear_accel_float_t
{
float x; /**< Linear accel x float data */
float y; /**< Linear accel y float data */
float z; /**< Linear accel z float data */
};
/*!
* @brief struct for Gravity-output data of precision float
*/
struct bno055_gravity_float_t
{
float x; /**< Gravity x float data */
float y; /**< Gravity y float data */
float z; /**< Gravity z float data */
};
extern struct bno055_accel_t ACC;
extern struct bno055_mag_t MAG;
extern struct bno055_gyro_t GYRO;
void BNOPrint(void);
void BNO055_Init(void);
void Read_BNO005_ACC(struct bno055_accel_t* acc);
void Read_BNO005_MAG(struct bno055_mag_t* mag);
void Read_BNO005_GYRO(struct bno055_gyro_t* gyro);
#endif