rgbeeper
confusedbread confuseddbread@gmail.com
Fri, 08 May 2026 18:32:24 +0200
2 files changed,
61 insertions(+),
2 deletions(-)
A
helpers.go
@@ -0,0 +1,51 @@
+package main + +import "image/color" + +type HSL struct { + H, S, L float64 +} + +func hueToRGB(v1, v2, h float64) float64 { + if h < 0 { + h += 1 + } + if h > 1 { + h -= 1 + } + switch { + case 6*h < 1: + return (v1 + (v2-v1)*6*h) + case 2*h < 1: + return v2 + case 3*h < 2: + return v1 + (v2-v1)*((2.0/3.0)-h)*6 + } + return v1 +} + +func (c HSL) ToRGB() color.RGBA { + h := c.H + s := c.S + l := c.L + + if s == 0 { + // it's gray + return color.RGBA{R: uint8(l), G: uint8(l), B: uint8(l)} + } + + var v1, v2 float64 + if l < 0.5 { + v2 = l * (1 + s) + } else { + v2 = (l + s) - (s * l) + } + + v1 = 2*l - v2 + + r := hueToRGB(v1, v2, h+(1.0/3.0)) + g := hueToRGB(v1, v2, h) + b := hueToRGB(v1, v2, h-(1.0/3.0)) + + return color.RGBA{R: uint8(r * 256), G: uint8(g * 256), B: uint8(b * 256)} +}
M
main.go
→
main.go
@@ -104,14 +104,22 @@ closedConfig := config
closedConfig.eyeColor = color.RGBA{R: 0, G: 0, B: 0} closed := eyes(eyes(leds, closedConfig, false), config, true) + color := HSL{H: 0.5, S: 1, L: 0.01} for { - if rand.Float32() > 0.1 { + color.H += 0.01 + if color.H > 1 { + color.H -= 1 + } + config.eyeColor = color.ToRGB() + open = eyes(leds, config, false) + closed = eyes(eyes(leds, closedConfig, false), config, true) + if rand.Float32() > 0.025 { device.WriteColors(open) } else { device.WriteColors(closed) } - time.Sleep(time.Millisecond * 200) + time.Sleep(time.Millisecond * 50) } }