add ws2812 controller
This commit is contained in:
commit
d7f1b47860
5
go.mod
Normal file
5
go.mod
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
module rpi-ci-led
|
||||||
|
|
||||||
|
go 1.14
|
||||||
|
|
||||||
|
require github.com/jgarff/rpi_ws281x v0.0.0-20200319211106-6a720cbd42d3
|
2
go.sum
Normal file
2
go.sum
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
github.com/jgarff/rpi_ws281x v0.0.0-20200319211106-6a720cbd42d3 h1:Gmtr3J666u+wiChtQ49FYzcdd6UgX0aWoLciRPo3His=
|
||||||
|
github.com/jgarff/rpi_ws281x v0.0.0-20200319211106-6a720cbd42d3/go.mod h1:xbXlgWZjA66nkwNqkT4ol2EqY7jL8v+1efK5ZnOT/MU=
|
28
main.go
Normal file
28
main.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"rpi-ci-led/pkg/ws2812b"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/joho/godotenv"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Println("GO ci hook")
|
||||||
|
|
||||||
|
godotenv.Load()
|
||||||
|
|
||||||
|
ws2812b.Init(18, 20, 255)
|
||||||
|
|
||||||
|
lock := make(chan os.Signal)
|
||||||
|
signal.Notify(lock, syscall.SIGINT, syscall.SIGTERM)
|
||||||
|
|
||||||
|
// main
|
||||||
|
|
||||||
|
<-lock
|
||||||
|
|
||||||
|
ws2812b.Close()
|
||||||
|
}
|
16
pkg/config/config.go
Normal file
16
pkg/config/config.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
type Server struct {
|
||||||
|
Port int `yaml:"port" env:"SERVER_PORT"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
Server Server `yaml:"server"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var c *Config
|
||||||
|
|
||||||
|
func Load(p ...string) error {
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
60
pkg/ws2812b/ws2812b.go
Normal file
60
pkg/ws2812b/ws2812b.go
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package ws2812b
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/jgarff/rpi_ws281x/golang/ws2811"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LED struct {
|
||||||
|
GPIO int
|
||||||
|
Count int
|
||||||
|
Brightness int
|
||||||
|
IsInit bool
|
||||||
|
}
|
||||||
|
|
||||||
|
var led *LED
|
||||||
|
|
||||||
|
func Init(gpio, count, brightness int) (*LED, error) {
|
||||||
|
if led != nil && led.IsInit == true {
|
||||||
|
ws2811.Clear()
|
||||||
|
ws2811.Fini()
|
||||||
|
}
|
||||||
|
|
||||||
|
err := ws2811.Init(gpio, count, brightness)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
led = &LED{
|
||||||
|
GPIO: gpio,
|
||||||
|
Count: count,
|
||||||
|
Brightness: brightness,
|
||||||
|
IsInit: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
return led, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Close() {
|
||||||
|
ws2811.Clear()
|
||||||
|
ws2811.Fini()
|
||||||
|
}
|
||||||
|
|
||||||
|
func ClearAll() {
|
||||||
|
ws2811.Clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
func WriteColor(pos int, color uint32) error {
|
||||||
|
if pos < 0 || pos > led.Count {
|
||||||
|
return errors.New("position out of range")
|
||||||
|
}
|
||||||
|
|
||||||
|
ws2811.SetLed(pos, color)
|
||||||
|
if err := ws2811.Render(); err != nil {
|
||||||
|
ws2811.Clear()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user