Названия статусов
This commit is contained in:
@@ -55,10 +55,29 @@ local FLOW_NONE = 0
|
|||||||
local FLOW_OUT = 1 -- Из сухого наружу
|
local FLOW_OUT = 1 -- Из сухого наружу
|
||||||
local FLOW_IN = 2 -- Снаружи в сухой
|
local FLOW_IN = 2 -- Снаружи в сухой
|
||||||
|
|
||||||
|
-- Статусы (с ведущим пробелом для отступа на дисплее)
|
||||||
|
local S_READY = "Готов"
|
||||||
|
local S_DRAIN_PRE = "Осушение перед входом"
|
||||||
|
local S_OPEN_IN = "Открытие внутренней двери"
|
||||||
|
local S_WAIT_IN = "Внутренняя дверь открыта"
|
||||||
|
local S_CLOSE_IN = "Закрытие внутренней двери"
|
||||||
|
local S_FLOOD = "Заполнение шлюза"
|
||||||
|
local S_DRAIN_OUT = "Осушение для выхода"
|
||||||
|
local S_DRAIN_RET = "Осушение для отсека"
|
||||||
|
local S_OPEN_OUT = "Открытие внешней двери"
|
||||||
|
local S_WAIT_OUT = "Внешняя дверь открыта"
|
||||||
|
local S_CLOSE_OUT = "Закрытие внешней двери"
|
||||||
|
local S_DRAIN_AFTER = "Осушение после входа"
|
||||||
|
|
||||||
|
-- Цвета
|
||||||
|
local C_GREEN = "0,255,0"
|
||||||
|
local C_CYAN = "0,200,255"
|
||||||
|
local C_YELLOW = "255,200,0"
|
||||||
|
|
||||||
-- Параметры (шкала воды: 0 = пусто, 100 = полно)
|
-- Параметры (шкала воды: 0 = пусто, 100 = полно)
|
||||||
local WAIT_TIMEOUT = 3 -- секунд ожидания у открытой двери
|
local WAIT_TIMEOUT = 3 -- секунд ожидания у открытой двери
|
||||||
local PUMP_TIMEOUT = 15 -- макс. секунд работы насоса до принудительного продолжения
|
local PUMP_TIMEOUT = 15 -- макс. секунд работы насоса до принудительного продолжения
|
||||||
local DRAIN_THRESHOLD = 10 -- почти пусто (выход в море)
|
local DRAIN_THRESHOLD = 10 -- почти пусто (выход в море)
|
||||||
local INNER_THRESHOLD = 10 -- можно открыть внутрь (по запросу: вода ниже 10%)
|
local INNER_THRESHOLD = 10 -- можно открыть внутрь (по запросу: вода ниже 10%)
|
||||||
local FLOOD_THRESHOLD = 90 -- почти полно (вход снаружи)
|
local FLOOD_THRESHOLD = 90 -- почти полно (вход снаружи)
|
||||||
local WATER_OPEN_SAFE = 10 -- при btn3: если воды > 10%, сначала осушить
|
local WATER_OPEN_SAFE = 10 -- при btn3: если воды > 10%, сначала осушить
|
||||||
@@ -76,7 +95,7 @@ local prev5 = false
|
|||||||
|
|
||||||
-- Установка текста и цвета статуса
|
-- Установка текста и цвета статуса
|
||||||
local function setStatus(text, color)
|
local function setStatus(text, color)
|
||||||
out[5] = text
|
out[5] = " " .. text
|
||||||
out[6] = color
|
out[6] = color
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -85,7 +104,7 @@ local function goIdle()
|
|||||||
out[1] = 0
|
out[1] = 0
|
||||||
out[2] = 0
|
out[2] = 0
|
||||||
out[3] = 0
|
out[3] = 0
|
||||||
setStatus("Готов", "0,255,0")
|
setStatus(S_READY, C_GREEN)
|
||||||
state = ST_IDLE
|
state = ST_IDLE
|
||||||
timer = 0
|
timer = 0
|
||||||
end
|
end
|
||||||
@@ -94,7 +113,7 @@ end
|
|||||||
out[1] = 0
|
out[1] = 0
|
||||||
out[2] = 0
|
out[2] = 0
|
||||||
out[3] = 0
|
out[3] = 0
|
||||||
setStatus("Готов", "0,255,0")
|
setStatus(S_READY, C_GREEN)
|
||||||
|
|
||||||
inp = {}
|
inp = {}
|
||||||
|
|
||||||
@@ -135,20 +154,20 @@ function upd(dt)
|
|||||||
if press3 then
|
if press3 then
|
||||||
-- Вход из сухого отсека: если есть вода — сначала осушаем, затем внутрь
|
-- Вход из сухого отсека: если есть вода — сначала осушаем, затем внутрь
|
||||||
if water > WATER_OPEN_SAFE then
|
if water > WATER_OPEN_SAFE then
|
||||||
setStatus("Осушение перед входом...", "0,200,255")
|
setStatus(S_DRAIN_PRE, C_CYAN)
|
||||||
out[3] = 1
|
out[3] = 1
|
||||||
out[4] = -100
|
out[4] = -100
|
||||||
flow = FLOW_OUT
|
flow = FLOW_OUT
|
||||||
state = ST_DRAIN_RET
|
state = ST_DRAIN_RET
|
||||||
else
|
else
|
||||||
setStatus("Открытие внутр. двери...", "0,255,0")
|
setStatus(S_OPEN_IN, C_GREEN)
|
||||||
out[2] = 1
|
out[2] = 1
|
||||||
flow = FLOW_OUT
|
flow = FLOW_OUT
|
||||||
state = ST_OPEN_IN
|
state = ST_OPEN_IN
|
||||||
end
|
end
|
||||||
elseif press5 then
|
elseif press5 then
|
||||||
-- Вход снаружи → заполнить шлюз водой, затем открыть внешнюю дверь
|
-- Вход снаружи → заполнить шлюз водой, затем открыть внешнюю дверь
|
||||||
setStatus("Заполнение шлюза...", "255,200,0")
|
setStatus(S_FLOOD, C_YELLOW)
|
||||||
out[3] = 1
|
out[3] = 1
|
||||||
out[4] = 100
|
out[4] = 100
|
||||||
flow = FLOW_IN
|
flow = FLOW_IN
|
||||||
@@ -162,12 +181,12 @@ function upd(dt)
|
|||||||
flow = dir
|
flow = dir
|
||||||
end
|
end
|
||||||
if dir == FLOW_OUT then
|
if dir == FLOW_OUT then
|
||||||
setStatus("Осушение для выхода...", "0,200,255")
|
setStatus(S_DRAIN_OUT, C_CYAN)
|
||||||
out[3] = 1
|
out[3] = 1
|
||||||
out[4] = -100
|
out[4] = -100
|
||||||
state = ST_DRAIN_EXIT
|
state = ST_DRAIN_EXIT
|
||||||
else
|
else
|
||||||
setStatus("Осушение для отсека...", "0,200,255")
|
setStatus(S_DRAIN_RET, C_CYAN)
|
||||||
out[3] = 1
|
out[3] = 1
|
||||||
out[4] = -100
|
out[4] = -100
|
||||||
state = ST_DRAIN_RET
|
state = ST_DRAIN_RET
|
||||||
@@ -179,7 +198,7 @@ function upd(dt)
|
|||||||
out[2] = 1
|
out[2] = 1
|
||||||
if doorIn then
|
if doorIn then
|
||||||
timer = 0
|
timer = 0
|
||||||
setStatus("Внутр. дверь открыта. Войдите.", "0,255,0")
|
setStatus(S_WAIT_IN, C_GREEN)
|
||||||
state = ST_WAIT_IN
|
state = ST_WAIT_IN
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -189,7 +208,7 @@ function upd(dt)
|
|||||||
timer = timer + dt
|
timer = timer + dt
|
||||||
if press4 or timer >= WAIT_TIMEOUT then
|
if press4 or timer >= WAIT_TIMEOUT then
|
||||||
press4consumed = press4
|
press4consumed = press4
|
||||||
setStatus("Закрытие внутр. двери...", "255,200,0")
|
setStatus(S_CLOSE_IN, C_YELLOW)
|
||||||
out[2] = 0
|
out[2] = 0
|
||||||
state = ST_CLOSE_IN
|
state = ST_CLOSE_IN
|
||||||
end
|
end
|
||||||
@@ -199,13 +218,13 @@ function upd(dt)
|
|||||||
if not doorIn then
|
if not doorIn then
|
||||||
if flow == FLOW_OUT then
|
if flow == FLOW_OUT then
|
||||||
-- Сценарий "в море": после входа → заполнить (давление) и открыть внешнюю
|
-- Сценарий "в море": после входа → заполнить (давление) и открыть внешнюю
|
||||||
setStatus("Заполнение шлюза...", "255,200,0")
|
setStatus(S_FLOOD, C_YELLOW)
|
||||||
out[3] = 1
|
out[3] = 1
|
||||||
out[4] = 100
|
out[4] = 100
|
||||||
state = ST_FLOOD
|
state = ST_FLOOD
|
||||||
else
|
else
|
||||||
-- Вернулись в отсек: завершено
|
-- Вернулись в отсек: завершено
|
||||||
setStatus("Готов", "0,255,0")
|
setStatus(S_READY, C_GREEN)
|
||||||
flow = FLOW_NONE
|
flow = FLOW_NONE
|
||||||
state = ST_IDLE
|
state = ST_IDLE
|
||||||
end
|
end
|
||||||
@@ -217,7 +236,7 @@ function upd(dt)
|
|||||||
out[4] = -100
|
out[4] = -100
|
||||||
if water <= DRAIN_THRESHOLD or press4 or pumpTimer >= PUMP_TIMEOUT then
|
if water <= DRAIN_THRESHOLD or press4 or pumpTimer >= PUMP_TIMEOUT then
|
||||||
press4consumed = press4
|
press4consumed = press4
|
||||||
setStatus("Открытие внеш. двери...", "0,200,255")
|
setStatus(S_OPEN_OUT, C_CYAN)
|
||||||
out[3] = 0
|
out[3] = 0
|
||||||
out[1] = 1
|
out[1] = 1
|
||||||
state = ST_OPEN_OUT
|
state = ST_OPEN_OUT
|
||||||
@@ -229,19 +248,19 @@ function upd(dt)
|
|||||||
out[4] = 100
|
out[4] = 100
|
||||||
if water >= FLOOD_THRESHOLD or press4 or pumpTimer >= PUMP_TIMEOUT then
|
if water >= FLOOD_THRESHOLD or press4 or pumpTimer >= PUMP_TIMEOUT then
|
||||||
press4consumed = press4
|
press4consumed = press4
|
||||||
setStatus("Открытие внеш. двери...", "255,200,0")
|
setStatus(S_OPEN_OUT, C_YELLOW)
|
||||||
out[3] = 0
|
out[3] = 0
|
||||||
out[1] = 1
|
out[1] = 1
|
||||||
state = ST_OPEN_OUT
|
state = ST_OPEN_OUT
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif state == ST_DRAIN_RET then
|
elseif state == ST_DRAIN_RET then
|
||||||
-- Осушение шлюза для входа в сухой отсек (можно раньше, порог INNER_THRESHOLD).
|
-- Осушение шлюза для входа в сухой отсек.
|
||||||
out[3] = 1
|
out[3] = 1
|
||||||
out[4] = -100
|
out[4] = -100
|
||||||
if water <= INNER_THRESHOLD or press4 or pumpTimer >= PUMP_TIMEOUT then
|
if water <= INNER_THRESHOLD or press4 or pumpTimer >= PUMP_TIMEOUT then
|
||||||
press4consumed = press4
|
press4consumed = press4
|
||||||
setStatus("Открытие внутр. двери...", "0,255,0")
|
setStatus(S_OPEN_IN, C_GREEN)
|
||||||
out[3] = 0
|
out[3] = 0
|
||||||
out[2] = 1
|
out[2] = 1
|
||||||
state = ST_OPEN_IN
|
state = ST_OPEN_IN
|
||||||
@@ -252,7 +271,7 @@ function upd(dt)
|
|||||||
out[1] = 1
|
out[1] = 1
|
||||||
if doorOut then
|
if doorOut then
|
||||||
timer = 0
|
timer = 0
|
||||||
setStatus("Внеш. дверь открыта. Выходите.", "0,200,255")
|
setStatus(S_WAIT_OUT, C_CYAN)
|
||||||
state = ST_WAIT_OUT
|
state = ST_WAIT_OUT
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -262,7 +281,7 @@ function upd(dt)
|
|||||||
timer = timer + dt
|
timer = timer + dt
|
||||||
if press4 or timer >= WAIT_TIMEOUT then
|
if press4 or timer >= WAIT_TIMEOUT then
|
||||||
press4consumed = press4
|
press4consumed = press4
|
||||||
setStatus("Закрытие внеш. двери...", "255,200,0")
|
setStatus(S_CLOSE_OUT, C_YELLOW)
|
||||||
out[1] = 0
|
out[1] = 0
|
||||||
state = ST_CLOSE_OUT
|
state = ST_CLOSE_OUT
|
||||||
end
|
end
|
||||||
@@ -272,13 +291,13 @@ function upd(dt)
|
|||||||
if not doorOut then
|
if not doorOut then
|
||||||
if flow == FLOW_IN then
|
if flow == FLOW_IN then
|
||||||
-- Сценарий "снаружи": после закрытия — осушение и вход в отсек
|
-- Сценарий "снаружи": после закрытия — осушение и вход в отсек
|
||||||
setStatus("Осушение после входа...", "0,200,255")
|
setStatus(S_DRAIN_AFTER, C_CYAN)
|
||||||
out[3] = 1
|
out[3] = 1
|
||||||
out[4] = -100
|
out[4] = -100
|
||||||
state = ST_DRAIN_RET
|
state = ST_DRAIN_RET
|
||||||
else
|
else
|
||||||
-- Сценарий "наружу": завершён
|
-- Сценарий "наружу": завершён
|
||||||
setStatus("Готов", "0,255,0")
|
setStatus(S_READY, C_GREEN)
|
||||||
state = ST_IDLE
|
state = ST_IDLE
|
||||||
flow = FLOW_NONE
|
flow = FLOW_NONE
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user