| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #!/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
|