From d6a9c9e500ec2dee4b9a080c6b5a11d710c87197 Mon Sep 17 00:00:00 2001 From: tonycao Date: Sat, 10 Oct 2026 20:53:18 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=AD=E7=8E=AF=E7=AE=97=E6=B3=95=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=EF=BC=9A=E5=88=86=E6=A1=A3=E5=9C=A8=E7=BA=BF=E8=BE=A8?= =?UTF-8?q?=E8=AF=86k+=E4=B8=8D=E5=AF=B9=E7=A7=B0EMA+=E8=BF=87=E5=86=B2?= =?UTF-8?q?=E8=87=AA=E6=83=A9=E7=BD=9A+=E8=87=AA=E9=80=82=E5=BA=94?= =?UTF-8?q?=E6=BF=80=E8=BF=9B=E7=B3=BB=E6=95=B0=EF=BC=8C=E5=AE=9E=E6=B5=8B?= =?UTF-8?q?=E5=8F=8C=E5=90=91=E5=8D=95=E8=B0=83=E9=9B=B6=E8=BF=87=E5=86=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0140650.pd2 | Bin 13787 -> 13904 bytes lpc_modbus_lux.lua | 33 +++++++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/0140650.pd2 b/0140650.pd2 index a11784272d4b9ee5fef940eb8d6c843921d573ec..b9bfcde4f0514fd88a8cea95d43384526ea141ee 100644 GIT binary patch literal 13904 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 literal 13787 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 Vy#L<=5;+V7{-DFfN0CEC`G0lD5u5-3 diff --git a/lpc_modbus_lux.lua b/lpc_modbus_lux.lua index 5eb4da6..a20a64c 100644 --- a/lpc_modbus_lux.lua +++ b/lpc_modbus_lux.lua @@ -29,6 +29,7 @@ local DEADBAND = lux_deadband local MIN_LEVEL = 0.05 local MAX_LEVEL = 1.0 local STEP_MAX = 0.20 +local K_DEFAULT = 3000 local ok, grp = pcall(get_group, 0) if not ok or grp == nil then @@ -38,16 +39,20 @@ if not ok or grp == nil then return end local err = TARGET_LUX - lux -if lux_prev_cmd ~= nil and lux_prev_cur ~= nil and lux_prev_lux ~= nil then +if lux_prev_cmd ~= nil and lux_prev_cur ~= nil and lux_prev_lux ~= nil and lux_prev_band ~= nil then local dl = lux_prev_cmd - lux_prev_cur local clamped = (lux_prev_cmd <= MIN_LEVEL + 0.001) or (lux_prev_cmd >= MAX_LEVEL - 0.001) - if math.abs(dl) > 0.002 and not clamped then + if math.abs(dl) > 0.005 and not clamped then local ki = (lux - lux_prev_lux) / dl - if ki > 100 and ki < 10000 then - if lux_k == nil then - lux_k = ki + if ki > 100 and ki < 10000 and math.abs(lux - lux_prev_lux) >= 3 then + lux_kb = lux_kb or {} + local kb = lux_kb[lux_prev_band] + if kb == nil then + lux_kb[lux_prev_band] = ki + elseif ki > kb then + lux_kb[lux_prev_band] = 0.5 * kb + 0.5 * ki else - lux_k = 0.7 * lux_k + 0.3 * ki + lux_kb[lux_prev_band] = 0.9 * kb + 0.1 * ki end end end @@ -69,9 +74,20 @@ if cur == nil or (hw ~= nil and math.abs(hw - cur) > 0.05) then cur = hw or 0.5 end -local k = lux_k or 500 -local delta = err / k +local band = math.floor(cur * 4.999) + 1 +local k = (lux_kb ~= nil and lux_kb[band]) or K_DEFAULT +lux_agg = lux_agg or 0.7 +local delta if lux_last_err ~= nil and (err > 0) ~= (lux_last_err > 0) then + lux_agg = lux_agg * 0.5 + if math.abs(err) > 3 and lux_kb ~= nil and lux_prev_band ~= nil and lux_kb[lux_prev_band] ~= nil then + lux_kb[lux_prev_band] = math.min(lux_kb[lux_prev_band] * 1.3, 10000) + end +else + lux_agg = math.min(lux_agg * 1.15, 0.9) +end +delta = err / k * lux_agg +if math.abs(err) < 30 then delta = delta * 0.5 end lux_last_err = err @@ -85,5 +101,6 @@ if new > MAX_LEVEL then new = MAX_LEVEL end lux_prev_cur = cur lux_prev_cmd = new lux_prev_lux = lux +lux_prev_band = band lux_cur_level = new grp:set_master_intensity(new, lux_fade)