Arduino MPU6050 AD0 Трюки со смещением дает поврежденные данные

В настоящее время я экспериментирую с двумя MPU6050, к которым AD0 подключается через контакт 7 и КОНТАКТ 8 соответственно, и если это сработает, я планирую добавить к нему еще 2 MPU6050.

Я использую библиотеку MPU6050 i2cdevlib, и то, что я сделал в потоке, таково:

  1. Инициализировать один объект MPU6050
  2. Установите объект MPU6050 как 0x68 (LOW AD0)
  3. Установите все значения на ВЫСОКИЙ, но один-на НИЗКИЙ (чтобы выбрать MPU6050).
  4. Вычислите смещение и откалибруйте, храните все в массиве. (смещения и т. Д.)
  5. Повторите шаги с 3 по 4, пока все они не будут откалиброваны.
  6. Начните петлять между двумя MPU, устанавливая все на ВЫСОКИЙ уровень, а тот, который будет использоваться, - на низкий.
  7. Запишите MPU LOW (текущий выбранный) со смещением, которое хранится в массиве, а затем getMotion6 (необработанные данные).
  8. Запишите выбранный 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 сравнивается со старым датчиком, может ли это быть так?

Прилагается вывод показаний моих датчиков, нетронутых.

, 👍1