52 lines
985 B
Go
52 lines
985 B
Go
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}
|
|
}
|