Files
2019-05-29 13:33:50 +02:00

104 lines
1.7 KiB
Go

package main
import (
"machine"
"image/color"
"time"
"tinygo.org/x/drivers/examples/hub75/gopherimg"
"tinygo.org/x/drivers/hub75"
)
var display hub75.Device
func main() {
machine.SPI0.Configure(machine.SPIConfig{
Frequency: 8000000,
Mode: 0},
)
display = hub75.New(machine.SPI0, 11, 12, 6, 10, 18, 20)
display.Configure(hub75.Config{
Width: 64,
Height: 32,
RowPattern: 16,
ColorDepth: 6,
})
colors := []color.RGBA{
{255, 0, 0, 255},
{255, 255, 0, 255},
{0, 255, 0, 255},
{0, 255, 255, 255},
{0, 0, 255, 255},
{255, 0, 255, 255},
{255, 255, 255, 255},
}
display.ClearDisplay()
display.SetBrightness(100)
step := 0
then := time.Now()
size := int16(8)
x := int16(0)
y := int16(0)
dx := int16(1)
dy := int16(1)
c := 0
for {
if time.Since(then).Nanoseconds() > 800000000 {
then = time.Now()
step++
if step < 23 {
showRect(size, x*size, y*size, colors[c])
c = (c + 1) % 7
x += dx
y += dy
if x >= (64 / size) {
dx = -1
x += 2 * dx
}
if y >= (32 / size) {
dy = -1
y += 2 * dy
}
if x < 0 {
dx = 1
x += 2 * dx
}
if y < 0 {
dy = 1
y += 2 * dy
}
} else if step == 23 {
showGopher()
} else if step == 30 {
display.ClearDisplay()
step = 0
x = 0
y = 0
}
}
display.Display()
}
}
func showGopher() {
for i := int16(0); i < 64; i++ {
for j := int16(0); j < 32; j++ {
display.SetPixel(i, j, gopherimg.Int2Color(gopherimg.ImageArray[32*i+j]))
}
}
}
func showRect(size int16, x int16, y int16, c color.RGBA) {
for i := x; i < x+size; i++ {
for j := y; j < y+size; j++ {
display.SetPixel(i, j, c)
}
}
}