Become a leader in the IoT community!
New DevHeads get a 320-point leaderboard boost when joining the DevHeads IoT Integration Community. In addition to learning and advising, active community leaders are rewarded with community recognition and free tech stuff. Start your Legendary Collaboration now!
Also when getting the data i now get a sample of 10 values
“` GetDataAsync()
public async Task
{
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 }; } ```
where
“`
private double CalculatePitch(Vector3 acceleration) =>
Math.Atan2(acceleration.X, Math.Sqrt(acceleration.Y * acceleration.Y + acceleration.Z * acceleration.Z)) * (180.0 / Math.PI);
private double CalculateRoll(Vector3 acceleration) =>
Math.Atan2(acceleration.Y, Math.Sqrt(acceleration.X * acceleration.X + acceleration.Z * acceleration.Z)) * (180.0 / Math.PI);
private double CalculateYaw(Vector3 angularVelocity, double deltaTime, ref double previousYaw)
{
previousYaw += angularVelocity.Z * deltaTime;
return previousYaw;
}
“`
CONTRIBUTE TO THIS THREAD