--[[ @module rainbow_effect @summary 彩虹灯光效果示例 @version 1.0 @date 2026.05.11 ]] local rainbow_effect = {} -- 效果名称 rainbow_effect.name = "rainbow" -- 效果描述 rainbow_effect.description = "流动的彩虹渐变效果" -- 效果参数配置 rainbow_effect.params = { speed = 50, -- 速度 0-100 brightness = 100, -- 亮度 0-100 saturation = 100 -- 饱和度 0-100 } -- 获取指定时间点的颜色 -- time: 时间(毫秒) -- led_index: LED索引 -- total_leds: LED总数 function rainbow_effect.getColor(time, led_index, total_leds) local params = rainbow_effect.params -- 计算色相值 local hue = (time * params.speed / 1000 + led_index * 360 / total_leds) % 360 -- 转换为RGB local sat = params.saturation / 100 local val = params.brightness / 100 local hi = math.floor(hue / 60) local f = (hue / 60) - hi local p = val * (1 - sat) local q = val * (1 - f * sat) local t = val * (1 - (1 - f) * sat) local r, g, b if hi == 0 then r, g, b = val, t, p elseif hi == 1 then r, g, b = q, val, p elseif hi == 2 then r, g, b = p, val, t elseif hi == 3 then r, g, b = p, q, val elseif hi == 4 then r, g, b = t, p, val else r, g, b = val, p, q end return { r = math.floor(r * 255), g = math.floor(g * 255), b = math.floor(b * 255) } end -- 设置参数 function rainbow_effect.setParam(name, value) if rainbow_effect.params[name] ~= nil then rainbow_effect.params[name] = math.max(0, math.min(100, value)) end end -- 获取参数 function rainbow_effect.getParam(name) return rainbow_effect.params[name] end return rainbow_effect