mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-07-26 10:38:41 +00:00
1bb1b621c6
Signed-off-by: deadprogram <ron@hybridgroup.com>
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
// Package microbitmatrix implements a driver for the BBC micro:bit's LED matrix.
|
|
//
|
|
// Schematic: https://github.com/bbcmicrobit/hardware/blob/master/SCH_BBC-Microbit_V1.3B.pdf
|
|
package microbitmatrix // import "tinygo.org/x/drivers/microbitmatrix"
|
|
|
|
import (
|
|
"image/color"
|
|
)
|
|
|
|
type Config struct {
|
|
Rotation uint8
|
|
}
|
|
|
|
// New returns a new microbitmatrix driver.
|
|
func New() Device {
|
|
return Device{}
|
|
}
|
|
|
|
// SetRotation changes the rotation of the LED matrix
|
|
func (d *Device) SetRotation(rotation uint8) {
|
|
d.rotation = rotation % 4
|
|
}
|
|
|
|
// SetPixel modifies the internal buffer in a single pixel.
|
|
func (d *Device) SetPixel(x int16, y int16, c color.RGBA) {
|
|
if x < 0 || x >= 5 || y < 0 || y >= 5 {
|
|
return
|
|
}
|
|
if c.R != 0 || c.G != 0 || c.B != 0 {
|
|
d.buffer[matrixRotations[d.rotation][y][x][0]][matrixRotations[d.rotation][y][x][1]] = true
|
|
} else {
|
|
d.buffer[matrixRotations[d.rotation][y][x][0]][matrixRotations[d.rotation][y][x][1]] = false
|
|
}
|
|
}
|
|
|
|
// GetPixel returns if the specific pixels is enabled
|
|
func (d *Device) GetPixel(x int16, y int16) bool {
|
|
if x < 0 || x >= 5 || y < 0 || y >= 5 {
|
|
return false
|
|
}
|
|
return d.buffer[matrixRotations[d.rotation][y][x][0]][matrixRotations[d.rotation][y][x][1]]
|
|
}
|