mt12/SCRIPTS/RGBLED/Bfwrd.lua
2025-06-26 07:54:22 -04:00

68 lines
No EOL
2.2 KiB
Lua
Executable file

local function init()
colorChangeTime = getTime() -- Initialize time
phase = 0
currentLed = 0 -- Current lit LED position
scroll_oldtime = getTime() -- Initialize scroll_oldtime
scroll_cycle = 0 -- Initialize scroll_cycle
end
-- Function to generate smooth cyclic colors
local function getColor(phase, length)
local position = (phase % length) / length
local r, g, b = 0, 0, 0
local maxBrightness = 255 -- Maximum brightness value
-- RGB color transition: red -> green -> blue -> red
if position < 1/3 then
-- From red to green
r = maxBrightness * (1 - 3 * position)
g = maxBrightness * (3 * position)
elseif position < 2/3 then
-- From green to blue
position = position - 1/3
g = maxBrightness * (1 - 3 * position)
b = maxBrightness * (3 * position)
else
-- From blue to red
position = position - 2/3
b = maxBrightness * (1 - 3 * position)
r = maxBrightness * (3 * position)
end
-- Skip colors that are close to the background color
local bg_r, bg_g, bg_b = 0, 0, 72 -- Background color
local threshold = 30 -- Color difference threshold
if math.abs(r - bg_r) < threshold and math.abs(g - bg_g) < threshold and math.abs(b - bg_b) < threshold then
return getColor((phase + 1) % length, length) -- Skip this color and get the next one
end
return r, g, b
end
local colorPhase = 0 -- Initialize color phase
local function run()
for i=0, LED_STRIP_LENGTH - 1, 1 do
if (i == scroll_cycle) then
local r, g, b = getColor(colorPhase, 255)
setRGBLedColor(i, r, g, b)
else
setRGBLedColor(i, 0, 0, 72)
end
end
if ((getTime() - scroll_oldtime) > 8) then
scroll_oldtime = getTime()
scroll_cycle = scroll_cycle + 1
if (scroll_cycle >= LED_STRIP_LENGTH) then
scroll_cycle = 0
end
end
colorPhase = (colorPhase + 1) % 255 -- Update color phase
applyRGBLedColors()
end
local function background()
-- Called periodically while the Special Function switch is off
end
return { run=run, background=background, init=init }