neopixel-steuerung/licht.sh

51 lines
2.3 KiB
Bash
Executable File

#! /bin/bash
LED_LENGTH=12
MAX_BRIGHTNESS=255
MIN_BRIGHTNESS=0
SLEEP_TIME=.001
IP="172.23.92.5"
PORT="49152"
GAMMA_LUT=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 13 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 24 24 25 25 26 27 27 28 29 29 30 31 32 32 33 34 35 35 36 37 38 39 39 40 41 42 43 44 45 46 47 48 49 50 50 51 52 54 55 56 57 58 59 60 61 62 63 64 66 67 68 69 70 72 73 74 75 77 78 79 81 82 83 85 86 87 89 90 92 93 95 96 98 99 101 102 104 105 107 109 110 112 114 115 117 119 120 122 124 126 127 129 131 133 135 137 138 140 142 144 146 148 150 152 154 156 158 160 162 164 167 169 171 173 175 177 180 182 184 186 189 191 193 196 198 200 203 205 208 210 213 215 218 220 223 225 228 231 233 236 239 241 244 247 249 252 255)
sign() {
[ $1 -lt 0 ] && echo "-1"; [ $1 -eq 0 ] && echo "0"; [ $1 -gt 0 ] && echo "1"
}
LED_COLORS=()
LED_COLORS_TARGET=()
i=0
while [ $i -lt $((3*$LED_LENGTH)) ]; do
LED_COLORS+=(0)
LED_COLORS_TARGET+=(0)
i=$(($i+1))
done
while true; do
COLOR_STRING=""
BYTE_LENGTH=0
BYTE_LENGTH_MAX=$((3*$LED_LENGTH))
while [ $BYTE_LENGTH -lt $BYTE_LENGTH_MAX ]; do
R="${LED_COLORS[$BYTE_LENGTH]}"
R_="${LED_COLORS_TARGET[$BYTE_LENGTH]}"
G="${LED_COLORS[$BYTE_LENGTH+1]}"
G_="${LED_COLORS_TARGET[$BYTE_LENGTH+1]}"
B="${LED_COLORS[$BYTE_LENGTH+2]}"
B_="${LED_COLORS_TARGET[$BYTE_LENGTH+2]}"
COLOR_STRING+="$(printf '%02x%02x%02x' "${GAMMA_LUT[$R]}" "${GAMMA_LUT[$G]}" "${GAMMA_LUT[$B]}")"
[ $R_ -eq $R ] && LED_COLORS_TARGET[$BYTE_LENGTH]="$(( RANDOM % ($MAX_BRIGHTNESS - $MIN_BRIGHTNESS) + $MIN_BRIGHTNESS ))"
[ $G_ -eq $G ] && LED_COLORS_TARGET[$BYTE_LENGTH+1]="$(( RANDOM % ($MAX_BRIGHTNESS - $MIN_BRIGHTNESS) + $MIN_BRIGHTNESS ))"
[ $B_ -eq $B ] && LED_COLORS_TARGET[$BYTE_LENGTH+2]="$(( RANDOM % ($MAX_BRIGHTNESS - $MIN_BRIGHTNESS) + $MIN_BRIGHTNESS ))"
LED_COLORS[$BYTE_LENGTH]=$(($R+$(sign $(($R_-$R)))))
LED_COLORS[$BYTE_LENGTH+1]=$(($G+$(sign $(($G_-$G)))))
LED_COLORS[$BYTE_LENGTH+2]=$(($B+$(sign $(($B_-$B)))))
((BYTE_LENGTH+=3))
done
COLOR_STRING="r$(echo "$(printf '%04x' "$((${#LED_COLORS[*]}+2))")0000$COLOR_STRING" | sed -e 's/\(..\)/\\x\1/g')"
echo -en "$COLOR_STRING" > /dev/udp/$IP/$PORT
sleep $SLEEP_TIME
done