#include "MPU6050.h" // подключение библиотеки
#include <LiquidCrystal_I2C.h>
MPU6050 mpu; //датчик
int16_t ax, ay, az;
// enum AxelNumToLett {
// X = 0,
// Y = 1,
// Z = 2
// };
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
const char text[11] = {132, 72, 75, 134, 132, 72, 79, 77, 69, 84, 80};
const byte symbol[8] = // ь
{
B00000,
B00000,
B10000,
B10000,
B11110,
B10001,
B10001,
B11110,
};
float RunnigMid(float x, byte idx){
static byte index = 0;
static float angleArr[3][10];
angleArr[idx][index] = x;
index++;
if(index >= 10){
index = 0;
}
float mid = 0;
for(int i = 0; i < 10; i++){
mid += angleArr[idx][i];
}
return (float)mid/10;
}
void setup()
{
Wire.begin();
Serial.begin(9600);
mpu.initialize();
Serial.println(mpu.testConnection() ? "MPU6050 OK" : "MPU6050 FAIL"); // состояние соединения
lcd.init();
lcd.backlight();
lcd.createChar(0, symbol);
lcd.setCursor(2, 0);
for(int i = 0; i < 11; i++){
lcd.write(text[i]);
}
delay(1000);
}
void loop()
{
static unsigned long timer = 2000;
static float axels[3] = {0, 0, 0};
const char axelsLetter[3] = {'X', 'Y', 'Z'};
static byte index = 0;
mpu.getAcceleration(&ax, &ay, &az);
axels[0] = RunnigMid((float)ax/32768*2, 0);
axels[1] = RunnigMid((float)ay/32768*2, 1);
axels[2] = RunnigMid((float)az/32768*2, 2);
lcd.setCursor(0, 1);
lcd.print("Oc"); lcd.write(byte(0)); lcd.print(" ");
lcd.print(axelsLetter[index]); lcd.print(": ");
lcd.print(axels[index]); lcd.write(176);
if(millis() - timer > 2000){
timer = millis();
index++;
if(index >= 3){
index = 0;
}
lcd.setCursor(0, 1);
lcd.print(" ");
}
}