Логические переключатели | Logical Switches
Логические переключатели (Logical Switches)
Цель: создать виртуальные 2‑позиционные переключатели, которые включаются/выключаются по логическому выражению (true/false), и затем использовать их везде, где EdgeTX принимает обычный физический переключатель.
Содержание
Обзор и экран Logical Switches
Что такое логические переключатели
Логические переключатели — это виртуальные 2‑позиционные переключатели, значение которых (ON/OFF или +100/-100) определяется результатом вычисления (true/false) заданного логического выражения.
После настройки логические переключатели можно использовать везде в EdgeTX, где допускается указать физический переключатель.
Экран Logical Switches

Экран Logical Switches.
Действия: +, Edit, Copy, Paste, Clear
Нажатие кнопки + позволяет выбрать неиспользуемый логический переключатель и настроить его.
Выбор уже настроенного логического переключателя открывает действия:
- Edit — открыть страницу настройки выбранного логического переключателя.
- Copy — скопировать выбранный логический переключатель.
- Paste — вставить скопированный логический переключатель в выбранную строку (перезапишет её).
- Clear — удалить все параметры конфигурации выбранного логического переключателя.
Настройка логического переключателя
Экран настройки (пример)
Экран настройки логического переключателя.
Параметры: Func, V1, V2, AND switch, Duration, Delay, Persistence
- Func — логическая функция, которую вы хотите использовать. Описание функций см. в разделе «Функции логических переключателей».
- V1 — первая переменная выражения для вычисления.
- V2 — вторая переменная выражения для вычисления.
- AND switch — переключатель, который должен быть активен, чтобы логический переключатель вообще вычислялся (то есть «разрешал» свою активацию).
- Duration — длительность, в течение которой логический переключатель остаётся активным (true) после выполнения условия активации. Если установлено 0.0, логический переключатель будет оставаться активным (true).
- Delay — задержка между моментом, когда условие активации выполнено, и моментом, когда логический переключатель перейдёт в активное состояние (true).
- Persistence (только для Sticky Switch) — сохраняет состояние «липкого» переключателя при выключении передатчика или смене модели и восстанавливает сохранённое значение при включении или повторном выборе модели.
Функции логических переключателей
Обозначения в выражениях
В выражениях a и b обозначают источники (стики, переключатели и т. п.), а x обозначает константы (числовые значения), с которыми выполняется сравнение.
Таблица функций (Expression → Description)
| Выражение | Описание |
|---|---|
| a=x | True, когда источник V1 точно равен константе V2. |
| a~x | True, когда источник V1 «примерно равен» константе V2. |
| a>x | True, когда источник V1 больше константы V2. |
| a<x | True, когда источник V1 меньше константы V2. |
| |a|>x | True, когда модуль источника V1 больше константы V2. |
| |a|<x | True, когда модуль источника V1 меньше константы V2. |
| AND | True, когда оба источника V1 и V2 равны TRUE. |
| OR | True, когда либо V1, либо V2 равен TRUE. |
| XOR | True, когда положения (состояния) источников V1 и V2 не совпадают. |
| Edge |
Кратковременно true, когда источник V1 был активен заданный период времени, а затем деактивировался. Первое поле времени (T1) в V1 — минимальная длительность активного состояния, необходимая, чтобы V1 мог активировать логический переключатель. Второе поле времени (T2) — максимальное время, в течение которого V1 может оставаться активным, чтобы логический переключатель был активирован. Если T2 установлено в --, логический переключатель будет true независимо от того, как долго V1 был активен. Если T2 установлено в 3, и V1 активен более 3 секунд, логический переключатель не станет true при деактивации источника. Если T2 установлено в <<, логический переключатель станет true, когда временные условия T1 выполнены, без необходимости деактивировать V1. |
| a=b | True, когда источник V1 равен источнику V2. |
| a>b | True, когда источник V1 больше источника V2. |
| a<b | True, когда источник V1 меньше источника V2. |
| △>x | Кратковременно true каждый раз, когда источник V1 изменяется больше, чем на величину, указанную константой V2. |
| |△|>x | Кратковременно true каждый раз, когда модуль изменения источника V1 больше, чем величина, указанная константой V2. |
| Timer | Кратковременно true каждые xxx секунд. Аргумент V1 — длительность, в течение которой логический переключатель true (активен). Аргумент V2 — время между активациями. Цикл таймера повторяется, пока заданный переключатель активен. |
| Stky (Sticky) | «Прилипает» в состоянии true после того, как переключатель V1 становится активным (true), и остаётся true независимо от положения V1, пока переключатель V2 не будет активирован (true) и не «отлипит» (не деактивирует, false) логический переключатель. Имеет опцию Persistence, позволяющую сохранять значение между перезагрузками или при переключении с модели и обратно. |
Ниже — «раскрытие темы» Logical Switches в EdgeTX: что это такое, как устроены параметры/функции, и как из них собирать удобные сценарии (arm, предупреждения, задержки, защёлки и т. п.).
что такое logical switch?
- Logical Switch (LS) — это виртуальный 2‑позиционный переключатель, который становится ON/OFF по результату логического выражения (true/false). В EdgeTX он может трактоваться как ON/OFF или как +100/‑100 (если использовать его как вход / input). 1
- После настройки LS можно использовать везде, где EdgeTX принимает обычный переключатель: в миксах, flight modes, special functions и т. д. 2
- Сильная сторона LS — это «слой логики»: один раз собрал условие (например, “ARM разрешён только при низком газе + выдержка 0.5s”), а дальше используешь его как обычный тумблер.
1) Где они находятся и как ими управлять (экран Logical Switches)
На странице Model Settings → Logical Switches виден список L01, L02, … и краткая сводка настроек. 2
Действия типовые:
- + — создать/занять свободную строку LS
- Edit — редактировать
- Copy / Paste — копировать/вставить (вставка перезапишет строку)
- Clear — очистить строку 2
Практический смысл Copy/Paste: вы часто строите «похожие» условия (например, 3 порога батареи), и быстрее клонировать строку и поменять V2, чем собирать заново.
2) Модель мышления: LS = “if … then ON”
У Logical Switch есть:
- Функция (Func) — “какой тип проверки делаем”
- Аргументы (V1, V2) — источники/константы для проверки
- (опционально) AND switch — “разрешающий” переключатель (гейт)
- (опционально) Delay/Duration — временная обработка события
- (опционально) Persistence — только для Sticky (сохранение состояния) 2
EdgeTX вычисляет логические переключатели постоянно в цикле управления: это не «скрипт по кнопке», а непрерывная логика. 3
3) Параметры настройки — что реально означают
Func / V1 / V2
- Func выбирает тип логики (сравнение, AND/OR, Edge, таймер, Sticky и т. п.). 2
- V1/V2 — это входы в выбранную функцию:
- иногда это источники (стики, тумблеры, телеметрия),
- иногда константа (число),
- иногда временные параметры (у Edge/Timer). 2
AND switch (гейт / “маска”)
Полезно думать так:
«LS будет вообще иметь право включаться, только если AND switch = TRUE».
Официально: это переключатель, который должен быть активен, чтобы LS вычислялся “для активации”. 2
Очень частый паттерн: “логика работает только в режиме ARM” или только в конкретном Flight Mode.
Важная практическая тонкость (из мира OpenTX/EdgeTX логики): сначала вычисляются условия функции (V1/V2), потом применяется AND‑гейт; это особенно важно со Sticky. 4
Delay (задержка включения)
Delay — задержка между моментом, когда условие стало истинным, и моментом, когда LS станет true. 2
Для чего нужно:
- отфильтровать краткие “пики” (просадка батареи при газе),
- убрать «лишние» промежуточные срабатывания при пролёте через среднее положение 3‑позиционного тумблера (например, голосовые объявления режимов). 5
Duration (удержание)
Duration — сколько LS будет оставаться true после выполнения условия активации; если 0.0 — будет оставаться true (пока условие истинно). 2
Практический смысл Duration:
- сделать из события короткий “импульс” фиксированной длины (даже если входная логика “дрожит”),
- “растянуть” краткое событие, чтобы его гарантированно увидела Special Function (озвучка/бип/override). 2
Persistence (только Sticky)
Для Sticky можно включить Persistence — состояние “защёлки” сохранится при выключении аппаратуры/смене модели и восстановится позже. 1
4) Функции Logical Switches — “что выбирать и когда”
EdgeTX в мануале описывает основные функции так (ниже — человеческая интерпретация + типовые применения). 2
A) Сравнения “источник vs число”
- a = x — ровно равно (редко удобно для аналоговых осей). 2
- a ~ x — примерно равно (как раз то, что чаще нужно для стиков/крутилок около центра). 2
- a > x, a < x — пороги: выше/ниже. 2
- |a| > x, |a| < x — пороги по модулю (например “стик отклонён больше чем на 50% в любую сторону”). 2
Типовые применения:
- “газ ниже -90” (throttle low),
- “RSSI ниже порога”,
- “RxBt ниже 7.2V”,
- “ручка отклонена достаточно далеко, чтобы считать это командой”.
B) Булева логика “переключатель vs переключатель”
- AND — оба true
- OR — хотя бы один true
- XOR — положения не совпадают (удобно для “ровно один из двух активен”). 2
Здесь V1 и V2 обычно — уже готовые условия (физические тумблеры, LS, flight mode).
C) Edge — детектор события (нажатие/удержание/тайм‑окно)
Edge даёт кратковременное true при событии, связанном со временем:
- базовая идея: LS становится true, когда V1 был активен нужное время и затем деактивировался;
- T1 = минимальная длительность активного состояния,
- T2 = максимальная (или спец‑режимы
--и<<). 2
Ключевые режимы из мануала:
- T2 =
--: сработает независимо от того, как долго V1 был активен - T2 =
<<: сработает, когда выполнен T1, без необходимости отпускать V1 2
Практические штуки, которые Edge делает очень легко:
- “короткое нажатие” vs “длинное удержание” моментарной кнопки,
- “сработай только если тумблер удерживали 1–2 секунды”,
- “сгенерируй импульс при отпускании”.
D) Сравнения “источник vs источник”
- a = b, a > b, a < b — сравнивать два источника между собой. 2
Например: сравнить два канала, два стика, телеметрию с GV и т. п.
E) Δ (delta) — “изменилось ли достаточно сильно”
- △ > x — кратковременно true, если источник изменился больше чем на x
- |△| > x — то же, но по модулю. 2
Это полезно, когда нужно реагировать не на абсолютное значение, а на факт движения:
- “крутилку резко повернули — проиграй ‘rates changed’”
- “ручку дёрнули — триггер события”.
F) Timer — генератор периодических импульсов
Timer: кратковременно true каждые N секунд, пока “разрешающий” переключатель активен; V1 задаёт длительность ON‑импульса, V2 — паузу между импульсами. 2
Использование:
- повторяющиеся голосовые напоминания (“arming!”, “low battery!” каждые 15 сек),
- периодический бип, пока включён режим поиска модели.
G) Sticky — “защёлка” Set/Reset (программный тумблер)
Sticky (Stky):
- становится true, когда V1 становится true (Set),
- остаётся true независимо от V1,
- станет false, когда V2 станет true (Reset). 2
Это основа для:
- “ARM latch” (включил — держится, пока не сбросишь),
- “двухкнопочный тумблер” (одна кнопка Set, другая Reset),
- “защита от случайного включения режима при старте”.
5) Инверсия ! (NOT): как читать “!SA-”
Во многих местах EdgeTX можно выбрать инвертированное условие: запись вида !SA- означает “SA не в среднем положении” (т. е. вверх или вниз). 6
Это важно в логике сброса (Sticky) и в “разрешающих” условиях.
6) Практические сценарии (готовые «рецепты»)
Ниже — несколько типовых конструкций, которые реально закрывают 80% «зачем мне Logical Switches».
Сценарий 1: “Низкая батарея без ложных срабатываний”
Проблема: напряжение проседает при резком газе → предупреждения спамят.
Решение:
- LS:
RxBt < 3.5V(или другой порог) + Delay 2–3s - Special Function: триггер = этот LS, действие = Play Track/Play Value, repeat = раз в N секунд
Идея “задержкой отфильтровать пики” — стандартный подход. 2
Сценарий 2: “Задержка включения сервомеханизма после ARM”
Если нельзя/неудобно делать задержку в микшере, её удобно сделать через LS:
- L01: “ARM активен” + Delay 5s
- В миксе сервоканала вместо ARM‑тумблера использовать L01 как Switch
Такой приём (Delay на LS, а потом LS в Switch микса) разбирают на практике на примере сервопривода. 7
Сценарий 3: “Безопасный ARM/Disarm через Sticky + ‘жест’”
Идея: ARM должен требовать осознанного действия (две руки/жест стиками), а DISARM — быть простым.
Один из классических вариантов: собрать “жест” (например, стики в углы + моментарная кнопка), этим Set защёлку (Sticky), а другой командой — Reset. 8
Плюсы:
- не зависит от положения физического тумблера при включении,
- резко снижает шанс случайного ARM.
Сценарий 4: “Throttle reverse включается только на низком газе”
Паттерн:
- L01:
Thr < -75+ Delay 0.5s (газ должен быть стабильно низким) - L02: Sticky (Set = “включить reverse”, Reset = “выключить reverse”), AND switch = L01 (разрешение только при low‑throttle)
Такая схема обсуждается как рабочая логика безопасности: reverse нельзя «врубить на ходу». 9
Сценарий 5: “Не озвучивать промежуточные положения 3‑позиционного тумблера”
Если Flight Mode/режимы повешены на комбинации тумблеров, при быстром переключении можно “пролетать” через промежуточные условия и получать лишние голосовые объявления.
Лечение: поставить небольшой Delay (например 0.3–0.5s) на LS, которые отвечают за промежуточные режимы — тогда быстрый пролёт не успевает активировать LS. 5
Сценарий 6: “Landing/perching mode” (логика как у Betaflight Air Mode)
Интересный пример “сложной логики поверх простых органов управления”: Edge + Sticky, чтобы временно выключить Air Mode по кнопке и автоматически вернуть при условии (например, после газа). 10
Даже если вам не нужен именно Air Mode, схема полезна как шаблон: momentary → edge‑импульс → sticky‑состояние → special functions/override.
7) Отладка и типичные ошибки (очень полезно на практике)
Быстро проверить, “живой” ли LS
Самый быстрый способ — временно повесить Special Function:
- Trigger = ваш Lxx
- Action = “Play Track” (короткий звук) или “Play Value”
Так вы слышите, когда LS реально стал true. Special Functions прямо поддерживают выбор Logical Switches в качестве триггеров. 11
Частая ошибка со Sticky: “пытался сделать ‘Set когда A и B’, но срабатывает странно”
Надёжный подход: двухступенчатая схема:
- L01 = AND(A, B) — “оба условия одновременно”
- L02 = Sticky(Set = L01, Reset = …)
Такой паттерн рекомендуют и в обсуждениях EdgeTX, когда ожидаемое “одновременное” поведение не получается из-за того, как именно вы скомбинировали AND switch и Sticky. 12
8) Продвинутый бонус: управлять Sticky из Lua
Если вы пишете Lua‑скрипты (меню/виджеты/автологика), EdgeTX даёт функцию setStickySwitch(id, value), чтобы программно выставить состояние sticky‑логического переключателя. 13
Это открывает интересные вещи:
- “сбросить ARM‑защёлку при событии из скрипта”,
- “синхронизировать LS с состоянием внешнего мастера/режима”.
9) Мини‑шпаргалка “что выбирать”
- Нужно условие по порогу (напряжение/газ/ручка) →
a<x,a>x,|a|…2 - Нужно “оба условия сразу” →
AND2 - Нужно событие на нажатие/удержание →
Edge2 - Нужно защёлкнуть состояние →
Sticky(+ при необходимости Persistence) 2 - Нужно периодически напоминать →
Timer2 - Нужно реагировать на факт движения ручки/крутилки →
△>x/|△|>x2
Похожее в категории "СОФТ"
-
Глобальные переменные | Global Variables
Цель: использовать Global Variables (GV) как общие параметры модели, которые можно подставлять в Weight, Offset, Diff, Expo, Outputs и сравнения логических переключателей, а также задавать разные значения для разных Flight Modes.
