refresh the display with new data

This commit is contained in:
2023-12-21 14:52:23 -05:00
parent 1430e5fc69
commit 9e83d6cc7d
3 changed files with 69 additions and 69 deletions
+58 -58
View File
@@ -1,11 +1,21 @@
package main package main
import ( import (
"context"
"fmt"
"image/color"
"log" "log"
"time"
"git.dvdt.dev/david/bitcoin-ticker-pi/display" "git.dvdt.dev/david/bitcoin-ticker-pi/display"
"git.dvdt.dev/david/bitcoin-ticker-pi/fonts" "git.dvdt.dev/david/bitcoin-ticker-pi/fonts"
rgbmatrix "git.dvdt.dev/david/bitcoin-ticker-pi/go-rpi-rgb-led-matrix" rgbmatrix "git.dvdt.dev/david/bitcoin-ticker-pi/go-rpi-rgb-led-matrix"
"git.dvdt.dev/david/bitcoin-ticker-pi/mempool"
)
const (
RefreshRateHz = 60
MempoolURL = "wss://mempool.dvdt.dev/v1/api/ws"
) )
func main() { func main() {
@@ -23,78 +33,68 @@ func main() {
display.NewSlot(12, 5, 4, 7, 27), display.NewSlot(12, 5, 4, 7, 27),
display.NewSlot(8, 5, 4, 28, 27), display.NewSlot(8, 5, 4, 28, 27),
) )
err := d.UpdateTopLeft([]display.Segment{
{Text: "dollar", Color: fonts.Green}, ctx, cancel := context.WithCancel(context.Background())
{Text: "4", Color: fonts.White}, ticker := time.NewTicker(time.Second / RefreshRateHz)
{Text: "2", Color: fonts.White}, tdone := make(chan struct{})
{Text: "0", Color: fonts.White}, mdone := make(chan struct{})
{Text: "0", Color: fonts.White}, blocks := make(chan mempool.Block)
{Text: "0", Color: fonts.White}, errs := make(chan error)
})
mp := mempool.New(MempoolURL)
err := mp.Init()
if err != nil { if err != nil {
log.Println(err) log.Fatal(err)
} }
err = d.UpdateTopRight([]display.Segment{ go func(done chan struct{}, t *time.Ticker) {
{Text: "satoshi", Color: fonts.Orange}, for {
{Text: "2", Color: fonts.White}, select {
{Text: ".", Color: fonts.White}, case <-done:
{Text: "5", Color: fonts.White}, return
{Text: "K", Color: fonts.White}, case <-ticker.C:
}) updateSlots(d, 44000, 821000, 100, 200, 300)
if err != nil { }
log.Println(err) }
}(tdone, ticker)
} }
err = d.UpdateCenter([]display.Segment{ func updateSlots(d *display.Display, price, height, lfee, mfee, hfee int) error {
{Text: "height", Color: fonts.Blue}, priceStr := fmt.Sprintf("%d", price)
{Text: "8", Color: fonts.White}, var priceSegments []display.Segment
{Text: "2", Color: fonts.White}, priceSegments = append(priceSegments, strToDisplaySegments("dollar", fonts.Green)...)
{Text: "1", Color: fonts.White}, priceSegments = append(priceSegments, strToDisplaySegments(fmt.Sprintf("%d", price), fonts.White)...)
{Text: "0", Color: fonts.White},
{Text: "0", Color: fonts.White}, err := d.UpdateTopLeft(priceSegments)
{Text: "0", Color: fonts.White},
})
if err != nil { if err != nil {
log.Println(err) return err
} }
err = d.UpdateBottomLeft([]display.Segment{ var moscowTimeSegments []display.Segment
{Text: "low", Color: fonts.Green}, moscowTimeSegments = append(moscowTimeSegments, strToDisplaySegments("satoshi", fonts.Orange)...)
{Text: "1", Color: fonts.White}, moscowTimeSegments = append(moscowTimeSegments, strToDisplaySegments(fmt.Sprintf("%d", 100000000/price), fonts.White)...)
{Text: "0", Color: fonts.White},
{Text: "0", Color: fonts.White}, err = d.UpdateTopRight(moscowTimeSegments)
{Text: "medium", Color: fonts.Orange},
{Text: "2", Color: fonts.White},
{Text: "0", Color: fonts.White},
{Text: "0", Color: fonts.White},
{Text: "high", Color: fonts.Red},
{Text: "3", Color: fonts.White},
{Text: "0", Color: fonts.White},
{Text: "0", Color: fonts.White},
})
if err != nil { if err != nil {
log.Println(err) return err
} }
err = d.UpdateBottomRight([]display.Segment{ var heightSegments []display.Segment
{Text: "1", Color: fonts.White}, heightSegments = append(heightSegments, strToDisplaySegments("height", fonts.Blue)...)
{Text: "2", Color: fonts.White}, heightSegments = append(heightSegments, strToDisplaySegments(fmt.Sprintf("%d", height), fonts.White)...)
{Text: ":", Color: fonts.White},
{Text: "0", Color: fonts.White}, err = d.UpdateCenter(heightSegments)
{Text: "0", Color: fonts.White},
{Text: ":", Color: fonts.White},
{Text: "0", Color: fonts.White},
{Text: "0", Color: fonts.White},
})
if err != nil { if err != nil {
log.Println(err) return err
} }
err = d.Render() return nil
if err != nil {
log.Println(err)
} }
select {} func strToDisplaySegments(s string, c color.Color) []display.Segment {
var segs []display.Segment
for _, r := range s {
segs = append(segs, display.Segment{Text: string(r), Color: c})
}
return segs
} }
+8 -8
View File
@@ -4,13 +4,13 @@ import (
rgbmatrix "git.dvdt.dev/david/bitcoin-ticker-pi/go-rpi-rgb-led-matrix" rgbmatrix "git.dvdt.dev/david/bitcoin-ticker-pi/go-rpi-rgb-led-matrix"
) )
type display struct { type Display struct {
canvas *rgbmatrix.Canvas canvas *rgbmatrix.Canvas
tl, tr, c, bl, br *Slot tl, tr, c, bl, br *Slot
} }
func New(canvas *rgbmatrix.Canvas, tl, tr, c, bl, br *Slot) *display { func New(canvas *rgbmatrix.Canvas, tl, tr, c, bl, br *Slot) *Display {
return &display{ return &display{
canvas: canvas, canvas: canvas,
tl: tl, tl: tl,
@@ -21,7 +21,7 @@ func New(canvas *rgbmatrix.Canvas, tl, tr, c, bl, br *Slot) *display {
} }
} }
func (d *display) UpdateTopLeft(text []Segment) error { func (d *Display) UpdateTopLeft(text []Segment) error {
err := d.tl.Update(text) err := d.tl.Update(text)
if err != nil { if err != nil {
return err return err
@@ -30,7 +30,7 @@ func (d *display) UpdateTopLeft(text []Segment) error {
return nil return nil
} }
func (d *display) UpdateTopRight(text []Segment) error { func (d *Display) UpdateTopRight(text []Segment) error {
err := d.tr.Update(text) err := d.tr.Update(text)
if err != nil { if err != nil {
return err return err
@@ -39,7 +39,7 @@ func (d *display) UpdateTopRight(text []Segment) error {
return nil return nil
} }
func (d *display) UpdateCenter(text []Segment) error { func (d *Display) UpdateCenter(text []Segment) error {
err := d.c.Update(text) err := d.c.Update(text)
if err != nil { if err != nil {
return err return err
@@ -48,7 +48,7 @@ func (d *display) UpdateCenter(text []Segment) error {
return nil return nil
} }
func (d *display) UpdateBottomLeft(text []Segment) error { func (d *Display) UpdateBottomLeft(text []Segment) error {
err := d.bl.Update(text) err := d.bl.Update(text)
if err != nil { if err != nil {
return err return err
@@ -57,7 +57,7 @@ func (d *display) UpdateBottomLeft(text []Segment) error {
return nil return nil
} }
func (d *display) UpdateBottomRight(text []Segment) error { func (d *Display) UpdateBottomRight(text []Segment) error {
err := d.br.Update(text) err := d.br.Update(text)
if err != nil { if err != nil {
return err return err
@@ -66,6 +66,6 @@ func (d *display) UpdateBottomRight(text []Segment) error {
return nil return nil
} }
func (d *display) Render() error { func (d *Display) Render() error {
return d.canvas.Render() return d.canvas.Render()
} }
+1 -1
View File
@@ -140,7 +140,7 @@ var (
"0": { "0": {
{0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 0, 0, 0, 1, 1, 0}, {1, 1, 0, 0, 1, 1, 1, 0},
{1, 1, 0, 1, 1, 1, 1, 0}, {1, 1, 0, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 0, 1, 1, 0}, {1, 1, 1, 1, 0, 1, 1, 0},
{1, 1, 1, 0, 0, 1, 1, 0}, {1, 1, 1, 0, 0, 1, 1, 0},