#include "LiquidCrystal.h"
#include "Wire.h"
const int MPU_addr = 0x68;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
int32_t data[10][7];
void setup()
{
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
lcd.begin(16, 2);
}
void loop()
{
static int i = 0;
int32_t value_scale_90[3] = {0, 0, 0};
getData(data[i]);
for (byte k = 0; k < 3; k++)
{
for (byte s = 0; s < 10; s++)
{
value_scale_90[k] += data[s][k];
}
value_scale_90[k] = value_scale_90[k] / 10;
value_scale_90[k] = map(value_scale_90[k], -32768, 32767, -90, 90);
}
i++; if (i > 9) i = 0;
lcd_print(value_scale_90[0], value_scale_90[1], value_scale_90[2]);
delay(100);
}
// функция чтения данных по I2C
void getData(int32_t* data)
{
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // установка начального регистра ACCEL_XOUT_H
Wire.endTransmission(false); //передача данных без установки состояния STOP
Wire.requestFrom(MPU_addr, 14, true); // запрос 14 байтов
for (byte i = 0; i < 7; i++) // считывание данных
{
data[i] = Wire.read() << 8 | Wire.read();
}
}
void lcd_print(int32_t x, int32_t y, int32_t z)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("X: "); lcd.print(x);
lcd.setCursor(9,0);
lcd.print("Y: "); lcd.print(y);
lcd.setCursor(1,1);
lcd.print("Z: "); lcd.print(z);
}