# Протокол MideaUART ## Основные параметры UART - **Бодовая скорость**: 9600 - **Формат кадра**: 8N1 (8 бит данных, отсутствие стоп-бита, четность отключена) - **Таймаут**: 50 мс ## Структура команды ```c struct Control { Mode mode; // Режим работы float targetTemp; // Целевая температура (°C) bool modeChange; // Флаг смены режима bool tempChange; // Флаг смены целевой температуры uint8_t pwmArg; // ШИМ-аргумент (2 байта) bool powerState; // Состояние питания int16_t presets; // Индекс предварительно установленных действий }; ``` ## Доступные режимы работы ```c enum class Mode { MODE_OFF, // Выключено MODE_COOL, // Охлаждение MODE_HEAT, // Отопление MODE_AUTO, // Авторегулировка MODE_DRY, // Сушка MODE_FAN, // Вентилятор MODE_SLEEP, // Сон MODE_TURBO, // Турбо MODE_PRESET_1-16 // Предварительно заданные режимы }; ``` ## Команды управления ### 4.1. Изменение режима работы ```c Control control; control.mode = Mode::MODE_COOL; // Установка режима охлаждения control.modeChange = true; // Нужно отправить команду ac.control(control); // Таймаут 50 мс ``` ### 4.2. Изменение температуры ```c control.targetTemp = 25.0f; // 25°C control.tempChange = true; // Нужно отправить команду ac.control(control); ``` ### 4.3. Изменение параметров подогрева (PWM) ```c control.pwmArg = 7000; // ШИМ-аргумент (мощность) ac.control(control); ``` ### 4.4. Изменение глушения (Swing Mode) ```c control.swingMode = SwingMode::VERTICAL; // Вертикальное ac.control(control); ``` ### 4.5. Изменение состояния питания ```c ac.setPowerState(false); // Выключить питание ``` ### 4.6. Изменение режима и температуры одновременно ```c control.mode = MODE_COOL; // Режим охлаждения control.targetTemp = 26.0f; // Изменение целевой температуры control.modeChange = true; control.tempChange = true; ac.control(control); ``` ## Пример полного цикла управления ```c void setup() { Serial.begin(9600); ac.setStream(&Serial); ac.setup(); } void loop() { // Пример: включить охлаждение на 25°C через 3 секунды delay(3000); Control control; control.mode = MODE_COOL; control.targetTemp = 25.0f; control.modeChange = true; control.tempChange = true; ac.control(control); // Таймаут 50 мс // Подождать 5 минут коммутации delay(300000); // Выключить ac.setPowerState(false); } ``` ## Дополнительные функции 1. **Получение состояния**: ```c float indoorTemp = ac.getIndoorTemp(); // Текущая температура Mode currentMode = ac.getMode(); // Текущий режим float targetTemperature = ac.getTargetTemp(); // Целевая температура ``` 2. **Сброс всех настроек**: ```c ac.reset(); ``` 3. **Создание предварительных действий**: ```c control.presets = 5; // Установить алгоритм 5 ac.control(control); ``` ## Особенности реализации - **Тайминг**: Все команды должны быть отправлены через 50 мс после инициализации - **Мультиплексирование**: Одну команду можно отправить каждые 50 мс - **Порядок команд**: 1. Выбор режима 2. Изменение температуры 3. Установка параметров подогрева 4. Включение/выключение питания ## Примечания - Все значения температуры в целых десятых градусов (15.7 = 157) - Для создания алгоритмов используйте `presets`-ше - Не забывайте вызывать `ac.loop()` каждые ~5 мс