我有一个 linux/bash 脚本,可以将多个 RGB 颜色渐变发送到多个灯光。每盏灯都可以有自己的颜色,但所有颜色都应该使用相同的时间来淡入/淡出。因此,它根据初始值和速度乘数发送 3 个不同目标值范围的序列。
我遇到的问题是颜色由 3 个通道红色、绿色和蓝色(0-255)定义,根据目标颜色,它可能意味着一个通道的值为 10,另一个通道的值为 230。工作顺利我需要他们从 0 开始,并在相同的时间/步数内以最大值完成。更成问题的是,我不能将值用作 0.112。它必须是 0 或 1。
目前,我已经能够通过限制我使用的颜色数量并且只为每个通道设置“半范围”值来解决这个问题。例如。R255 G128 B000。通过这种方式,我已经能够使其工作(在可接受的误差范围内)。对于每个通道我已经制作了一个单独的基础乘数,它将影响每个通道淡入/淡出的速度(所以对于 255 2x , 对于 128 1x, 对于 000, 0x)
由于我有 3 盏灯,我只想将值序列发送到我需要的灯,我还将 3 个 RGB 值相加以查看是否等于零,如果是,则不会触发分配的灯。
[Q] 谁能帮我优化这个脚本,让它可以处理所有的 RGB 值,我还可以让它在颜色之间褪色。最重要的条件是我需要能够应用全局速度乘数,并且不能是逗号后面的值。
以下是我到目前为止所做的脚本。我已经取出了其他灯的副本,因为它基本上是相同线条的复制粘贴,但名称不同。
maxR=000, maxG=000, maxB=255, speed=10,
toggle=$(($maxR + $maxG + $maxB))
subR=$(echo $maxR | cut -c-1), subG=$(echo $maxG | cut -c-1), subB=$(echo $maxB | cut -c-1),
mulR=$(($subR*$speed)), mulG=$(($subG*$speed)), mulB=$(($subB*$speed))
count=0
while [ $count -lt 3 ] ; do
count=$(($count +1))
while [ $varR -lt $maxR ] || [ $valG -lt $maxG ] || [ $valB -lt $maxB ] ; do
[[ $toggle -gt 0 ]] && $valR to red && $valG to green && $valB to blue
varR=$(($varR +$mulR))
valG=$(($valG +$mulG))
valB=$(($valB +$mulB))
done
sleep 1
while [ $varR -gt 0 ] || [ $valG -gt 0 ] || [ $valB -gt 0 ] ; do
[[ $toggle -gt 0 ]] && $valR to red && $valG to green && $valB to blue
varR=$(($varR -$mulR))
valG=$(($valG -$mulG))
valB=$(($valB -$mulB))
done
sleep 3
done