138 lines
4.7 KiB
Markdown
138 lines
4.7 KiB
Markdown
# Протокол 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 мс |