Compare commits

...

5 Commits

Author SHA1 Message Date
Martyn b9d8f7de92 Newer Drone requires kind: kubernetes
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Signed-off-by: Martyn Ranyard <m@rtyn.berlin>
2021-01-03 11:55:29 +01:00
Martyn 5655ddd56e Trigger CI
continuous-integration/drone/push Build was killed Details
Signed-off-by: Martyn Ranyard <m@rtyn.berlin>
2021-01-03 11:53:31 +01:00
Martyn b898c0c669 Merge branch 'master' of ssh://git-ssh.martyn.berlin:2222/martyn/LEDController
continuous-integration/drone/push Build was killed Details
Signed-off-by: Martyn Ranyard <m@rtyn.berlin>
2021-01-03 11:48:48 +01:00
Martyn 568654d88e Trigger CI
Signed-off-by: Martyn Ranyard <m@rtyn.berlin>
2021-01-03 11:48:41 +01:00
Martyn 2709d98125 moarpatterns (#1)
Make the comparison work

Allow color setting

types.... yeah... I know about them.

single-colour plasma, I hope

Reviewed-on: #1
Co-Authored-By: Martyn <m@rtyn.berlin>
Co-Committed-By: Martyn <m@rtyn.berlin>
2021-01-03 10:46:39 +00:00
5 changed files with 76 additions and 5 deletions

View File

@ -1,3 +1,7 @@
# LEDController
Testing out sending e1.31 sACM packets to strings of ws2812b
Testing out sending e1.31 sACM packets to strings of ws2812b
Seems to be working nicely.
Used for my streaming setup on https://twitch.tv/iMartynOnTwitch

View File

@ -1,5 +1,5 @@
kind: pipeline
type: docker
type: kubernetes
name: linux-amd64-taggedver
platform:
@ -39,7 +39,7 @@ trigger:
---
kind: pipeline
type: docker
type: kubernetes
name: linux-amd64-devel-master
platform:
@ -60,4 +60,4 @@ steps:
trigger:
ref:
- refs/heads/devel
- refs/heads/master
- refs/heads/master

View File

@ -32,6 +32,11 @@ var previousEffect queue.QueueItem
var msDelay = 0
func isColorSet(c RGBcolor) bool {
// Any color so long as it's NOT black!
return c[0] != 0 || c[1] != 0 || c[2] != 0
}
func foreverLoop() {
for /*ever*/ {
time.Sleep(time.Duration(msDelay) * time.Millisecond) //25fps
@ -169,7 +174,11 @@ func main() {
case "line":
rearranged = remapping.SliceRearrange(PanelWidth, PanelHeight, true, remapping.XYGridToLinear(PanelWidth, PanelHeight, patterns.ZigZag(PanelWidth, PanelHeight)))
case "plasma":
rearranged = remapping.SliceRearrange(PanelWidth, PanelHeight, true, remapping.XYGridToLinear(PanelWidth, PanelHeight, patterns.PlasmaPanel(PanelWidth, PanelHeight, currentEffect.Speed)))
if isColorSet(currentEffect.SeedColour) {
rearranged = remapping.SliceRearrange(PanelWidth, PanelHeight, true, remapping.XYGridToLinear(PanelWidth, PanelHeight, patterns.PlasmaPanelSingleColor(PanelWidth, PanelHeight, currentEffect.Speed, currentEffect.SeedColour)))
} else {
rearranged = remapping.SliceRearrange(PanelWidth, PanelHeight, true, remapping.XYGridToLinear(PanelWidth, PanelHeight, patterns.PlasmaPanel(PanelWidth, PanelHeight, currentEffect.Speed)))
}
case "red":
rearranged = remapping.SliceRearrange(PanelWidth, PanelHeight, false, remapping.XYGridToLinear(PanelWidth, PanelHeight, patterns.RedPanel(PanelWidth, PanelHeight)))
case "random":

View File

@ -112,3 +112,46 @@ func PlasmaPanel(w int, h int, speed uint16) [][]RGBcolor {
}
return grid
}
func singleColorPlasmaFromFloatVal(val float64, baseColor RGBcolor) (byte, byte, byte) {
var r byte
var g byte
var b byte
val = positiveModF(val)
r = byte(math.Trunc(float64(baseColor[0]) * val))
g = byte(math.Trunc(float64(baseColor[1]) * val))
b = byte(math.Trunc(float64(baseColor[2]) * val))
return r, g, b
}
func PlasmaPanelSingleColor(w int, h int, speed uint16, baseColor RGBcolor) [][]RGBcolor {
grid := make([][]RGBcolor, w)
for i := 0; i < w; i++ {
grid[i] = make([]RGBcolor, h)
}
palletteOffset -= 0.05 / 1.0
if palletteOffset < 0 {
palletteOffset += 1.0
}
offset := 0.5 // center offset
scaleW := math.Pi * 2.0 / float64(w)
scaleH := math.Pi * 2.0 / float64(h)
for y := 0; y < h; y++ {
for x := 0; x < w; x++ {
u := math.Cos((float64(x) + offset) * scaleW)
v := math.Cos((float64(y) + offset) * scaleH)
j := math.Cos(offset * scaleW) // 2D - No Z
e := (u + v + j + 3.0) / 6.0
r, g, b := singleColorPlasmaFromFloatVal(palletteOffset+e, baseColor)
var rgb [3]byte
rgb[0] = r
rgb[1] = g
rgb[2] = b
grid[x][y] = rgb
}
}
return grid
}

View File

@ -55,6 +55,17 @@ func PatternHandler(response http.ResponseWriter, request *http.Request) {
} else {
e.Speed = 40
}
if vars["color"] != "" {
var c queue.RGBcolor
for cn, cv := range colornames.Map {
if cn == strings.ToLower(vars["color"]) {
c[0] = cv.R
c[1] = cv.G
c[2] = cv.B
}
}
e.SeedColour = c
}
if vars["override"] == "true" {
overrideFlag <- e
} else {
@ -159,6 +170,10 @@ func HandleHTTP(queueChannel chan queue.QueueItem, Port int, overrideChannel cha
r.HandleFunc("/pattern/{pattern}/", PatternHandler)
r.HandleFunc("/pattern/{pattern}/{duration}", PatternHandler)
r.HandleFunc("/pattern/{pattern}/{duration}/{speed}", PatternHandler)
r.HandleFunc("/colorpattern/{color}/{pattern}/override={override}", PatternHandler)
r.HandleFunc("/colorpattern/{color}/{pattern}/", PatternHandler)
r.HandleFunc("/colorpattern/{color}/{pattern}/{duration}", PatternHandler)
r.HandleFunc("/colorpattern/{color}/{pattern}/{duration}/{speed}", PatternHandler)
r.HandleFunc("/colour/{name}", ColourHandler)
r.HandleFunc("/colour/{name}/override={override}", ColourHandler)
r.HandleFunc("/colour/{name}/{duration}", ColourHandler)