upm  1.7.1
Sensor/Actuator repository for libmraa (v2.0.0)
Public Member Functions | Protected Member Functions | Protected Attributes

UPM API for the BMI160 3-axis Accelerometer, Gyroscope and Magnetometer. More...

Detailed Description

The Bosch BMI160 is a 3-axis Accelerometer and Gyroscope. Additionally it supports an external Magnetometer, accessed through the BMI160's register interface. This driver was developed with a BMI160 "Shuttle" board, which included a BMM150 Magnetometer.

The device is driven by either 1.8v or 3.3vdc. This driver incorporates the Bosch BMI160 driver code at https://github.com/BoschSensortec/BMI160_driver

The Bosch driver code does not provide a mechanism for passing user data around (like the device context). For this reason, only one instance of this driver can be used in a given process, due to the use of static data in the driver.

While not all of the functionality of this device is supported initially, the inclusion of the Bosch driver in the source code makes it possible to support whatever features are required that the driver can support.

// Instantiate a BMI160 instance using default i2c bus and address
upm::BMI160 sensor;
while (shouldRun) {
// update our values from the sensor
sensor.update();
float dataX, dataY, dataZ;
sensor.getAccelerometer(&dataX, &dataY, &dataZ);
cout << "Accelerometer: ";
cout << "AX: " << dataX << " AY: " << dataY << " AZ: " << dataZ << endl;
sensor.getGyroscope(&dataX, &dataY, &dataZ);
cout << "Gryoscope: ";
cout << "GX: " << dataX << " GY: " << dataY << " GZ: " << dataZ << endl;
sensor.getMagnetometer(&dataX, &dataY, &dataZ);
cout << "Magnetometer: ";
cout << "MX: " << dataX << " MY: " << dataY << " MZ: " << dataZ << endl;
cout << endl;
upm_delay_us(500000);
}

Public Member Functions

 BMI160 (int bus=BMI160_I2C_BUS, int address=BMI160_DEFAULT_I2C_ADDR, int csPin=-1, bool enableMag=true)
 
 ~BMI160 ()
 
void update ()
 
void setAccelerometerScale (BMI160_ACC_RANGE_T scale)
 
void setGyroscopeScale (BMI160_GYRO_RANGE_T scale)
 
float * getAccelerometer ()
 
void getAccelerometer (float *x, float *y, float *z)
 
float * getGyroscope ()
 
void getGyroscope (float *x, float *y, float *z)
 
float * getMagnetometer ()
 
void getMagnetometer (float *x, float *y, float *z)
 
void enableMagnetometer (bool enable)
 
unsigned int getSensorTime ()
 

Protected Member Functions

std::string busRead (int addr, int reg, int len)
 
void busWrite (int addr, int reg, std::string data)
 

Protected Attributes

bmi160_context m_bmi160
 

Constructor & Destructor Documentation

BMI160 ( int  bus = BMI160_I2C_BUS,
int  address = BMI160_DEFAULT_I2C_ADDR,
int  csPin = -1,
bool  enableMag = true 
)

BMI160 constructor. The default arguments inititialize I2C operation and the default I2C address.

Parameters
busi2c bus to use
addressThe address for this device if using I2C. If using SPI, supply -1 for this parameter.
csPinThe GPIO to use for Chip Select (CS). This is only needed for SPI, and only if your SPI implementation requires it. Otherwise, just pass -1 if not using SPI, or your CS is handled automatically by your SPI implementation.
enableMagtrue to enable the magnetometer, false otherwise
~BMI160 ( )

BMI160 Destructor

Member Function Documentation

void update ( void  )

Take a measurement and store the current sensor values internally. This function must be called prior to retrieving any sensor values, for example getAccelerometer().

void setAccelerometerScale ( BMI160_ACC_RANGE_T  scale)

set the scaling mode of the accelerometer

Parameters
scaleone of the ACCEL_RANGE_T values
void setGyroscopeScale ( BMI160_GYRO_RANGE_T  scale)

set the scaling mode of the gyroscope

Parameters
scaleone of the GYRO_RANGE_T values
float * getAccelerometer ( )

Get the Accelerometer values. This function returns a pointer to 3 floating point values: X, Y, and Z, in that order. The values returned are in gravities. update() must have been called prior to calling this method.

The caller is reponsible for freeing the returned pointer.

Returns
Pointer to 3 floating point values: X, Y, and Z in gravities.
void getAccelerometer ( float *  x,
float *  y,
float *  z 
)

Get the Accelerometer values. The values returned are in gravities. update() must have been called prior to calling this method.

Parameters
xA pointer into which the X value will be returned
yA pointer into which the Y value will be returned
zA pointer into which the Z value will be returned
float * getGyroscope ( )

Get the Gyroscope values. This function returns a pointer to 3 floating point values: X, Y, and Z, in that order. The values values returned are in degrees per second. update() must have been called prior to calling this method.

The caller is reponsible for freeing the returned pointer.

Returns
Pointer to 3 floating point values: X, Y, and Z in degrees per second.
void getGyroscope ( float *  x,
float *  y,
float *  z 
)

Get the Gyroscope values. The values returned are in degrees per second. update() must have been called prior to calling this method.

Parameters
xA pointer into which the X value will be returned
yA pointer into which the Y value will be returned
zA pointer into which the Z value will be returned
float * getMagnetometer ( )

Get the Magnetometer values. This function returns a pointer to 3 floating point values: X, Y, and Z, in that order. The values values returned are in micro Teslas. update() must have been called prior to calling this method. If the Magnetometer has been disabled, the return values will always be 0, 0, and 0.

The caller is reponsible for freeing the returned pointer.

Returns
Pointer to 3 floating point values: X, Y, and Z in micro Teslas.
void getMagnetometer ( float *  x,
float *  y,
float *  z 
)

Get the Magnetometer values. The values returned are in micro Teslas. update() must have been called prior to calling this method.

Parameters
xA pointer into which the X value will be returned
yA pointer into which the Y value will be returned
zA pointer into which the Z value will be returned
void enableMagnetometer ( bool  enable)

Enable or disable the Magnetometer. By default, the magnetometer is enabled.

Parameters
enabletrue to enable the magnetometer, false to disable.
unsigned int getSensorTime ( )

Return the sensor time. This is a 24bit value that increments every 39us. It will wrap around once the 24b resolution is exceeded.

Returns
The current sensor time.
string busRead ( int  addr,
int  reg,
int  len 
)
protected

Perform a bus read. This function is bus agnostic, and is used by the bosch code to perform bus reads. It is exposed here for those users wishing to perform their own low level accesses. This is a low level function, and should not be used unless you know what you are doing.

Parameters
addrFor I2C operation, this is the I2C address. For SPI, this argument is ignored.
regThe register address to access.
cntThe number of bytes to read.
Returns
The data read
void busWrite ( int  addr,
int  reg,
std::string  data 
)
protected

Perform a bus write. This function is bus agnostic, and is used by the bosch code to perform bus writes. It is exposed here for those users wishing to perform their own low level accesses. This is a low level function, and should not be used unless you know what you are doing.

Parameters
addrFor I2C operation, this is the I2C address. For SPI, this argument is ignored.
addrThe register address to access.
dataThe string containing the data to write
Collaboration diagram for BMI160:
Collaboration graph
[legend]

The documentation for this class was generated from the following files: