Загрузка данных


#include <Wire.h>

// I2C адрес датчика (для MPU6050 обычно 0x68 или 0x69)
const uint8_t MPU_ADDR = 0x68; 

int16_t AccX, AccY, AccZ;
float ax, ay, az;

void setup() {
  // Инициализация последовательного порта для отладки
  Serial.begin(115200);
  
  // Инициализация шины I2C (SDA, SCL)
  Wire.begin(); 
  
  // Пробуждаем акселерометр (выводим из спящего режима PWR_MGMT_1)
  Wire.beginTransmission(MPU_ADDR);
  Wire.write(0x6B); // Регистр управления питанием
  Wire.write(0);    // Записываем 0 для сброса спящего режима
  Wire.endTransmission(true);

  Serial.println("Инициализация акселерометра завершена.");
}

void loop() {
  // Запрашиваем 6 байт данных ускорения, начиная с регистра 0x3B (ACCEL_XOUT_H)
  Wire.beginTransmission(MPU_ADDR);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_ADDR, (size_t)6, true);

  if (Wire.available() >= 6) {
    AccX = (Wire.read() << 8) | Wire.read(); // X axis (High | Low byte)
    AccY = (Wire.read() << 8) | Wire.read(); // Y axis (High | Low byte)
    AccZ = (Wire.read() << 8) | Wire.read(); // Z axis (High | Low byte)

    // Перевод сырых значений в ускорение g (для диапазона ±2g делитель 16384.0)
    ax = AccX / 16384.0;
    ay = AccY / 16384.0;
    az = AccZ / 16384.0;

    // Вывод данных в консоль
    Serial.print("Ускорение [g] -> ");
    Serial.print("X: "); Serial.print(ax, 2);
    Serial.print(" | Y: "); Serial.print(ay, 2);
    Serial.print(" | Z: "); Serial.println(az, 2);
  }

  delay(200); // Опрос раз в 200 мс
}