nicebadge/tutorial/basics/step3b/main.go

53 lines
985 B
Go
Raw Permalink Normal View History

2026-04-18 11:01:06 +00:00
package main
import (
"image/color"
"machine"
"time"
"tinygo.org/x/drivers/ws2812"
)
func main() {
// WS2812 LEDs are on pin P1_11
neo := machine.P1_11
neo.Configure(machine.PinConfig{Mode: machine.PinOutput})
leds := ws2812.New(neo)
ledColors := make([]color.RGBA, 2)
// A cycles forward, B cycles backward through the rainbow
btnA := machine.P1_06
btnB := machine.P1_04
btnA.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
btnB.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
var k uint8
for {
if !btnA.Get() {
k++
}
if !btnB.Get() {
k--
}
ledColors[0] = getRainbowRGB(k)
ledColors[1] = getRainbowRGB(k + 10)
leds.WriteColors(ledColors)
time.Sleep(10 * time.Millisecond)
}
}
func getRainbowRGB(i uint8) color.RGBA {
if i < 85 {
return color.RGBA{i * 3, 255 - i*3, 0, 255}
} else if i < 170 {
i -= 85
return color.RGBA{255 - i*3, 0, i * 3, 255}
}
i -= 170
return color.RGBA{0, i * 3, 255 - i*3, 255}
}