Iot.Device.Imu.Mpu6050 — System.IO.IOExceptionC#

Место общения программистов C#
Ответить
Anonymous
 Iot.Device.Imu.Mpu6050 — System.IO.IOException

Сообщение Anonymous »

Я изо всех сил пытаюсь откалибровать Mpu 6050, особенно это касается;

Код: Выделить всё

Adafruit MPU-6050 6-DoF Accel and Gyro Sensor - STEMMA QT Qwiic
который подключен к Raspberry Pi 2.
Когда я пытаюсь вызвать .CalibrateGyrscopeAccelerometer(); метод, я получаю ошибку;

Код: Выделить всё

System.IO.IOException: Can set GyroscopeBandwidth, desired value Bandwidth0184Hz, stored value Bandwidth0250Hz

Код: Выделить всё

 public HardwareAccelerometerController(
ILogger logger,
int i2cAddress,
int recalibrationIntervalMinutes,
int i2cBusId = 1)
{
_logger = logger;

try
{
var i2cSettings = new I2cConnectionSettings(i2cBusId, i2cAddress);
var i2cDevice = I2cDevice.Create(i2cSettings);

_mpu6050 = new Mpu6050(i2cDevice);  // Initialize the MPU6050
_logger.LogInformation($"MPU6050 initialized with I2C address {i2cAddress} on bus {i2cBusId}.");
}
catch (Exception ex)
{
_logger.LogError(ex, $"Failed to initialize MPU6050 with I2C address {i2cAddress} on bus {i2cBusId}. Check connections and configuration.");
throw new InvalidOperationException("MPU6050 initialization failed. Ensure the device is connected and configured correctly.", ex);
}

_recalibrationIntervalMinutes = recalibrationIntervalMinutes;
_lastCalibrationTime = DateTime.Now;
}

/// 
/// Calibrate the accelerometer and gyroscope.
/// 
public async Task CalibrateAsync()
{
if (_mpu6050 == null)
{
_logger.LogError("Cannot calibrate MPU6050 because it is not initialized.");
throw new InvalidOperationException("MPU6050 is not initialized.");
}

await Task.Run(() =>
{
_logger.LogInformation("Calibrating MPU6050...");
try
{
_mpu6050.CalibrateGyroscopeAccelerometer();
_logger.LogInformation("Calibration complete.");
}
catch (IOException ex)
{
_logger.LogError(ex, "Failed to set the GyroscopeBandwidth. Proceeding with default bandwidth.");
}
});
Из логгера устройство инициализируется;

Код: Выделить всё

MPU6050 initialized with I2C address 104 on bus 1.
При запуске sudo i2cdetect -y 1 на pi я получаю

Код: Выделить всё

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Итак, модуль присутствует — я также попробовал сценарий Python, который возвращает данные из устройства.
Я не могу найти никаких подробностей о нем. эта конкретная ошибка? Может ли кто-нибудь сказать мне, как это отладить и что я делаю неправильно?
Обновить
Я пробовал установка пропускной способности специально для класса Mpu6050, похоже, это меняет значение, но ошибка все равно сохраняется?

Код: Выделить всё

_logger.LogInformation($"Gyroscope bandwidth is set to {_mpu6050.GyroscopeBandwidth}");
_logger.LogInformation($"Attempting to set the gyroscope bandwidth to Bandwidth0184Hz.");
_mpu6050.GyroscopeBandwidth = GyroscopeBandwidth.Bandwidth0184Hz;
_logger.LogInformation($"Gyroscope bandwidth now set to {_mpu6050.GyroscopeBandwidth}");

_mpu6050.CalibrateGyroscopeAccelerometer();
выводит, что значение изменилось.

Подробнее здесь: https://stackoverflow.com/questions/790 ... oexception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»