Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
Sample project(s) available on GitHub
Syntax
public class Bmi270 : PollingSensorBase<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Temperature? Temperature)>, IObservable<IChangeResult<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Temperature? Temperature)>>, ISamplingSensor<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Temperature? Temperature)>, ISensor<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Temperature? Temperature)>, II2cPeripheral, IGyroscope, ISamplingSensor<AngularVelocity3D>, ISensor<AngularVelocity3D>, IAccelerometer, ISamplingSensor<Acceleration3D>, ISensor<Acceleration3D>, ITemperatureSensor, ISamplingSensor<Temperature>, ISensor<Temperature>
Constructors
Bmi270(II2cBus, byte)
Create a new Bmi270 instance
Declaration
public Bmi270(II2cBus i2cBus, byte address = 104)
Parameters
Type | Name | Description |
---|---|---|
II2cBus | i2cBus | The I2C bus connected to the sensor |
byte | address | The I2C address |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
Fields
i2cComms
I2C Communication bus used to communicate with the peripheral
Declaration
protected readonly II2cCommunications i2cComms
Field Value
Type | Description |
---|---|
II2cCommunications |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
Properties
Acceleration3D
Current Acceleration 3D
Declaration
public Acceleration3D? Acceleration3D { get; }
Property Value
Type | Description |
---|---|
Acceleration3D? |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
AngularVelocity3D
Current Angular Velocity (Gyro) 3D
Declaration
public AngularVelocity3D? AngularVelocity3D { get; }
Property Value
Type | Description |
---|---|
AngularVelocity3D? |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
CurrentAccelerationRange
The range of values that can be read for acceleration on each axis
Declaration
public Bmi270.AccelerationRange CurrentAccelerationRange { get; }
Property Value
Type | Description |
---|---|
Bmi270.AccelerationRange |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
CurrentAngularVelocityRange
The range of values that can be read for angular acceleration (gyro) on each axis
Declaration
public Bmi270.AngularVelocityRange CurrentAngularVelocityRange { get; }
Property Value
Type | Description |
---|---|
Bmi270.AngularVelocityRange |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
DefaultI2cAddress
The default I2C address for the peripheral
Declaration
public byte DefaultI2cAddress { get; }
Property Value
Type | Description |
---|---|
byte |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
Temperature
Current Temperature
Declaration
public Temperature? Temperature { get; }
Property Value
Type | Description |
---|---|
Temperature? |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
Methods
RaiseEventsAndNotify(IChangeResult<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Temperature? Temperature)>)
Raise events for subscribers and notify of value changes
Declaration
protected override void RaiseEventsAndNotify(IChangeResult<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Temperature? Temperature)> changeResult)
Parameters
Type | Name | Description |
---|---|---|
IChangeResult<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Temperature? Temperature)> | changeResult | The updated sensor data |
Overrides
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
ReadSensor()
Reads data from the sensor
Declaration
protected override Task<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Temperature? Temperature)> ReadSensor()
Returns
Type | Description |
---|---|
Task<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Temperature? Temperature)> | The latest sensor reading |
Overrides
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
SetAccelerationRange(AccelerationRange)
Set the range of values the sensor can read for acceleration
Declaration
public void SetAccelerationRange(Bmi270.AccelerationRange accelRange)
Parameters
Type | Name | Description |
---|---|---|
Bmi270.AccelerationRange | accelRange | AccelerationRange |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
SetAngularVelocityRange(AngularVelocityRange)
Set the range of values the sensor can read for angular velocity (gyro)
Declaration
public void SetAngularVelocityRange(Bmi270.AngularVelocityRange angRange)
Parameters
Type | Name | Description |
---|---|---|
Bmi270.AngularVelocityRange | angRange | AngularAccelerationRange |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
SetPowerMode(PowerMode)
Set the device power mode
Declaration
public void SetPowerMode(Bmi270.PowerMode powerMode)
Parameters
Type | Name | Description |
---|---|---|
Bmi270.PowerMode | powerMode | The power mode |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
Events
Acceleration3DUpdated
Event raised when linear acceleration changes
Declaration
public event EventHandler<IChangeResult<Acceleration3D>> Acceleration3DUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<Acceleration3D>> |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
AngularVelocity3DUpdated
Event raised when angular velocity (gyro) changes
Declaration
public event EventHandler<IChangeResult<AngularVelocity3D>> AngularVelocity3DUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<AngularVelocity3D>> |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}
TemperatureUpdated
Event raised when temperature changes
Declaration
public event EventHandler<IChangeResult<Temperature>> TemperatureUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<Temperature>> |
Remarks
Bmi270 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Bmi270 bmi270;
public override Task Initialize()
{
Resolver.Log.Info("Initialize hardware...");
bmi270 = new Bmi270(Device.CreateI2cBus());
// classical .NET events can also be used:
bmi270.Updated += HandleResult;
// Example that uses an IObservable subscription to only be notified when the filter is satisfied
var consumer = Bmi270.CreateObserver(handler: result => HandleResult(this, result),
filter: result => FilterResult(result));
bmi270.Subscribe(consumer);
bmi270.StartUpdating(TimeSpan.FromMilliseconds(2000));
return base.Initialize();
}
bool FilterResult(IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
return result.New.Acceleration3D.Value.Z > new Acceleration(0.1, Acceleration.UnitType.Gravity);
}
void HandleResult(object sender,
IChangeResult<(Acceleration3D? Acceleration3D,
AngularVelocity3D? AngularVelocity3D,
Temperature? Temperature)> result)
{
var accel = result.New.Acceleration3D.Value;
var gyro = result.New.AngularVelocity3D.Value;
var temp = result.New.Temperature.Value;
Resolver.Log.Info($"AccelX={accel.X.Gravity:0.##}g, AccelY={accel.Y.Gravity:0.##}g, AccelZ={accel.Z.Gravity:0.##}g, GyroX={gyro.X.RadiansPerMinute:0.##}rpm, GyroY={gyro.Y.RadiansPerMinute:0.##}rpm, GyroZ={gyro.Z.RadiansPerMinute:0.##}rpm, {temp.Celsius:0.##}C");
}