Arduino MPU6050 AD0 Трюки со смещением дает поврежденные данные
В настоящее время я экспериментирую с двумя MPU6050, к которым AD0 подключается через контакт 7 и КОНТАКТ 8 соответственно, и если это сработает, я планирую добавить к нему еще 2 MPU6050.
Я использую библиотеку MPU6050 i2cdevlib, и то, что я сделал в потоке, таково:
- Инициализировать один объект MPU6050
- Установите объект MPU6050 как 0x68 (LOW AD0)
- Установите все значения на ВЫСОКИЙ, но один-на НИЗКИЙ (чтобы выбрать MPU6050).
- Вычислите смещение и откалибруйте, храните все в массиве. (смещения и т. Д.)
- Повторите шаги с 3 по 4, пока все они не будут откалиброваны.
- Начните петлять между двумя MPU, устанавливая все на ВЫСОКИЙ уровень, а тот, который будет использоваться, - на низкий.
- Запишите MPU LOW (текущий выбранный) со смещением, которое хранится в массиве, а затем getMotion6 (необработанные данные).
- Запишите выбранный MPU на высокий уровень, повторите процедуру с шага 6 по шаг 7.
Все работает, однако, когда у меня есть цикл для сбора данных, он дает мне поврежденные данные, и проблема, которую я нахожу, заключается в этой функции
void loop{
for (int i = 7; i <= 8; i++) {
pinMode(i, OUTPUT);
digitalWrite( i, LOW);
// Serial.print("\nWriting pin: ");
// Serial.print(i);
// Serial.println(" to LOW");
delay(2);
int index = i - 7;
Serial.print("Offsets:\t");
Serial.print(ax_offset[index]);
Serial.print("\t");
Serial.print(ay_offset[index]);
Serial.print("\t");
Serial.print(az_offset[index]);
Serial.print("\t");
Serial.print(gx_offset[index]);
Serial.print("\t");
Serial.print(gy_offset[index]);
Serial.print("\t");
Serial.println(gz_offset[index]);
accelgyro.setXAccelOffset(ax_offset[index]);
accelgyro.setYAccelOffset(ay_offset[index]);
accelgyro.setZAccelOffset(az_offset[index]);
accelgyro.setXGyroOffset(gx_offset[index]);
accelgyro.setYGyroOffset(gy_offset[index]);
accelgyro.setZGyroOffset(gz_offset[index]);
Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t");
Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t");
Serial.print(accelgyro.getZAccelOffset()); Serial.print("\t");
Serial.print(accelgyro.getXGyroOffset()); Serial.print("\t");
Serial.print(accelgyro.getYGyroOffset()); Serial.print("\t");
Serial.print(accelgyro.getZGyroOffset()); Serial.println("\t");
// delay(1000);
// accelgyro.getMotion6(&ax[index], &ay[index], &az[index], &gx[index], &gy[index], &gz[index]);
int ax, ay, az, gx, gy, gz;
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
Serial.print("PIN ");
Serial.print(i);
Serial.print("'s data is:");
Serial.print("aX:" ); Serial.print(ax); Serial.print("\t");
Serial.print("aY:" ); Serial.print(ay); Serial.print("\t");
Serial.print("aZ:" ); Serial.print(az); Serial.print("\t");
Serial.print("gX:" ); Serial.print(gx); Serial.print("\t");
Serial.print("gY:" ); Serial.print(gy); Serial.print("\t");
Serial.print("gZ:" ); Serial.println(gz);
pinMode(i, INPUT_PULLUP);
}
}
Первые несколько циклов будут возвращать точные данные (как в, все датчики близки к 0 [нет движения])
Я подозреваю, потому что есть огромная разница между обоими датчиками, и getMotion6 сравнивается со старым датчиком, может ли это быть так?
Прилагается вывод показаний моих датчиков, нетронутых.
@user5109293123, 👍1
0
Смотрите также:
- Проблема с библиотекой MPU6050
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
- Библиотека DHT.h не импортируется