#!/bin/bash # 检查参数个数 if [ $# -ne 4 ]; then echo "Usage: $0 <0-2> <0-4095> <0-4095> <0-4095>" exit 1 fi # 赋值参数 # bus 0-/dev/i2c-0 1-/dev/i2c-1 bus=0 # param1 0-第0个LED 1-第1个LED 2-第2个LED param1=$1 # param2 red param2=$2 param2=$((4095 - ${param2})) # param3 green param3=$3 param3=$((4095 - ${param3})) # param4 blue param4=$4 param4=$((4095 - ${param4})) # 验证第一个参数范围 0-2 if ! [[ "$param1" =~ ^[0-2]$ ]]; then echo "Error: First parameter must be 0, 1, or 2" exit 1 fi # 验证后面三个参数范围 0-4095 for i in 2 3 4; do val=${!i} if ! [[ "$val" =~ ^[0-9]+$ ]] || [ "$val" -lt 0 ] || [ "$val" -gt 4095 ]; then echo "Error: Parameter $i must be an integer between 0 and 4095" exit 1 fi done # 拆分函数:将 0-4095 的值拆成两个字节(高8位和低8位) split_into_bytes() { local value=$1 local high_byte=$(( (value >> 8) & 0xFF )) local low_byte=$(( value & 0xFF )) echo "$high_byte $low_byte" } read high1 low1 <<< $(split_into_bytes $param2) read high2 low2 <<< $(split_into_bytes $param3) read high3 low3 <<< $(split_into_bytes $param4) echo "param1:${param1}" echo "high1:${high1} low1:${low1}" echo "high1:${high2} low1:${low2}" echo "high1:${high3} low1:${low3}" reg_06=$((0x06 + ${param1} * 12)) reg_07=$((0x07 + ${param1} * 12)) reg_08=$((0x08 + ${param1} * 12)) reg_09=$((0x09 + ${param1} * 12)) reg_0a=$((0x0a + ${param1} * 12)) reg_0b=$((0x0b + ${param1} * 12)) reg_0c=$((0x0c + ${param1} * 12)) reg_0d=$((0x0d + ${param1} * 12)) reg_0e=$((0x0e + ${param1} * 12)) reg_0f=$((0x0f + ${param1} * 12)) reg_10=$((0x10 + ${param1} * 12)) reg_11=$((0x11 + ${param1} * 12)) # echo "${reg_06} ${reg_07} ${reg_08} ${reg_09} ${reg_0a} ${reg_0b} ${reg_0c} ${reg_0d} ${reg_0e} ${reg_0f} ${reg_10} ${reg_11} " i2cset -y ${bus} 0x40 $reg_06 0 i2cset -y ${bus} 0x40 $reg_07 0 i2cset -y ${bus} 0x40 $reg_08 $low1 i2cset -y ${bus} 0x40 $reg_09 $high1 i2cset -y ${bus} 0x40 $reg_0a 0 i2cset -y ${bus} 0x40 $reg_0b 0 i2cset -y ${bus} 0x40 $reg_0c $low2 i2cset -y ${bus} 0x40 $reg_0d $high2 i2cset -y ${bus} 0x40 $reg_0e 0 i2cset -y ${bus} 0x40 $reg_0f 0 i2cset -y ${bus} 0x40 $reg_10 $low3 i2cset -y ${bus} 0x40 $reg_11 $high3