Init
This commit is contained in:
138
docs/protocol.md
Normal file
138
docs/protocol.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# Протокол 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 мс
|
||||
Reference in New Issue
Block a user