# Грузоблочный тренажер - Android приложение Android приложение для управления грузоблочным тренажером с ESP32 микроконтроллером. ## Функциональность 1. **Регистрация участника** - добавление и выбор участника тренировки 2. **Выбор режима упражнений** - выбор готового сценария или создание индивидуального 3. **Пуск и останов упражнения** - управление тренировкой 4. **Подсчет подъемов** - в режиме на время считаются выполненные подъемы 5. **Отсчет времени** - в режиме на количество отсчитывается время выполнения 6. **Кардиодатчик** - отображение показаний пульса в реальном времени через Bluetooth 7. **Печать отчетов** - вывод результатов тренировки на принтер ## Технологии - Kotlin - Jetpack Compose - Room Database - WebSocket (OkHttp) для связи с ESP32 - Bluetooth LE для кардиодатчика - Navigation Component ## Настройка ### WebSocket подключение к ESP32 В файле `MainActivity.kt` измените URL WebSocket: ```kotlin val websocketUrl = "ws://192.168.1.100:81" // Замените на IP вашего ESP32 ``` ESP32 должен отправлять сообщения в формате JSON: ```json {"position": "top"} // или "bottom" ``` ### Bluetooth кардиодатчик Приложение автоматически сканирует и подключается к Bluetooth устройствам с Heart Rate Service (UUID: 0000180d-0000-1000-8000-00805f9b34fb). При первом запуске приложение запросит разрешения: - Bluetooth - Location (требуется для Bluetooth LE сканирования на Android 12+) ## Структура проекта ``` app/src/main/java/ru/kgeu/training/ ├── data/ │ ├── dao/ # Data Access Objects для Room │ ├── database/ # Room Database │ ├── model/ # Модели данных │ └── repository/ # Репозиторий для работы с данными ├── network/ │ └── WebSocketClient.kt # WebSocket клиент для ESP32 ├── bluetooth/ │ └── HeartRateMonitor.kt # Bluetooth сервис для кардиодатчика ├── ui/ │ ├── navigation/ # Навигация │ ├── screen/ # UI экраны │ ├── theme/ # Тема приложения │ └── viewmodel/ # ViewModels └── util/ └── PrintUtil.kt # Утилита для печати ``` ## Режимы упражнений ### Режим на время - Устанавливается целевое время (в секундах) - Считается количество выполненных подъемов - Тренировка завершается по истечении времени ### Режим на количество - Устанавливается целевое количество подъемов - Отсчитывается время выполнения - Тренировка завершается при достижении цели ## База данных Приложение использует Room Database для хранения: - Участников тренировок - Сценариев упражнений (готовых и пользовательских) - Сессий тренировок с результатами ## Печать Функция печати использует стандартную систему печати Android и поддерживает: - Печать на принтеры через Wi-Fi - Сохранение в PDF - Отправку по email ## Требования - Android 8.0 (API 26) или выше - Поддержка Bluetooth LE - Подключение к сети для WebSocket ## Разработка Для сборки проекта используйте: ```bash ./gradlew assembleDebug ``` Для установки на устройство: ```bash ./gradlew installDebug ```