public async Task<AccelerometerData> GetDataAsync()
{
if (_icm20948 == null)
{
throw new InvalidOperationException("ICM20948 is not initialized.");
}
int numReadings = 10;
Vector3 accelTotal = new Vector3(0, 0, 0);
Vector3 gyroTotal = new Vector3(0, 0, 0);
for (int i = 0; i < numReadings; i++)
{
var acceleration = _icm20948.GetAccelerometer();
var angularVelocity = _icm20948.GetGyroscope();
accelTotal += acceleration;
gyroTotal += angularVelocity;
await Task.Delay(10); // Small delay between readings
}
Vector3 accelAverage = accelTotal / numReadings;
Vector3 gyroAverage = gyroTotal / numReadings;
var pitch = CalculatePitch(accelAverage);
var roll = CalculateRoll(accelAverage);
var currentTime = DateTime.Now;
var deltaTime = (currentTime - _lastUpdate).TotalSeconds;
_lastUpdate = currentTime;
_previousYaw += gyroAverage.Z * deltaTime;
var yaw = _previousYaw;
_logger.LogInformation($"Data from ICM20948 is Pitch:{pitch}, Roll:{roll}, Yaw:{yaw}.");
return new AccelerometerData
{
Pitch = pitch,
Roll = roll,
Yaw = yaw
};
}
public async Task<AccelerometerData> GetDataAsync()
{
if (_icm20948 == null)
{
throw new InvalidOperationException("ICM20948 is not initialized.");
}
int numReadings = 10;
Vector3 accelTotal = new Vector3(0, 0, 0);
Vector3 gyroTotal = new Vector3(0, 0, 0);
for (int i = 0; i < numReadings; i++)
{
var acceleration = _icm20948.GetAccelerometer();
var angularVelocity = _icm20948.GetGyroscope();
accelTotal += acceleration;
gyroTotal += angularVelocity;
await Task.Delay(10); // Small delay between readings
}
Vector3 accelAverage = accelTotal / numReadings;
Vector3 gyroAverage = gyroTotal / numReadings;
var pitch = CalculatePitch(accelAverage);
var roll = CalculateRoll(accelAverage);
var currentTime = DateTime.Now;
var deltaTime = (currentTime - _lastUpdate).TotalSeconds;
_lastUpdate = currentTime;
_previousYaw += gyroAverage.Z * deltaTime;
var yaw = _previousYaw;
_logger.LogInformation($"Data from ICM20948 is Pitch:{pitch}, Roll:{roll}, Yaw:{yaw}.");
return new AccelerometerData
{
Pitch = pitch,
Roll = roll,
Yaw = yaw
};
}