#include <Wire.h>
#include <LiquidCrystal.h>
const int MPU_addr = 0x68; // Адрес MPU6050
int16_t ax, ay, az; // Переменные для хранения данных акселерометра
// Переменная для подсчета шагов
int stepCount = 0;
float threshold = 10000; // Пороговое значение для определения шага
// Инициализация LCD (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
Serial.begin(115200); // Инициализация серийного порта
// Инициализация MPU6050
Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); // Сбросить регистр сна
Wire.write(0); // Пробуждение MPU6050
Wire.endTransmission(true);
// Инициализация LCD
lcd.begin(16, 2); // Установить размер дисплея 16x2
lcd.print("Steps: "); // Вывести заголовок на дисплей
}
void loop() {
// Чтение данных акселерометра
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // Начать с регистра акселерометра
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr, 14, true); // Запросить 14 байтов данных
ax = Wire.read() << 8 | Wire.read(); // Чтение данных по оси X
ay = Wire.read() << 8 | Wire.read(); // Чтение данных по оси Y
az = Wire.read() << 8 | Wire.read(); // Чтение данных по оси Z
// Определение шага на основе данных акселерометра
if (abs(ax) > threshold || abs(ay) > threshold) {
stepCount++;
delay(200); // Задержка для предотвращения двойного подсчета
}
// Отображение количества шагов на LCD-дисплее
lcd.setCursor(0, 1); // Установить курсор на вторую строку
lcd.print(stepCount); // Вывести количество шагов
delay(100); // Задержка перед следующим считыванием
}