Files
deadprogram 8b3075fdba build: remove older format build tags
Signed-off-by: deadprogram <ron@hybridgroup.com>
2022-12-21 17:47:14 -05:00

77 lines
2.0 KiB
Go

//go:build microbit
// 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 (
"machine"
)
// 4 rotation orientations (0, 90, 180, 270), CW (clock wise)
// 5 rows
// 5 cols
// target coordinates in machine rows (y) and cols (x)
var matrixRotations = [4][5][5][2]uint8{
{ // 0
{{0, 0}, {1, 3}, {0, 1}, {1, 4}, {0, 2}},
{{2, 3}, {2, 4}, {2, 5}, {2, 6}, {2, 7}},
{{1, 1}, {0, 8}, {1, 2}, {2, 8}, {1, 0}},
{{0, 7}, {0, 6}, {0, 5}, {0, 4}, {0, 3}},
{{2, 2}, {1, 6}, {2, 0}, {1, 5}, {2, 1}},
},
{ // 90 CW
{{0, 2}, {2, 7}, {1, 0}, {0, 3}, {2, 1}},
{{1, 4}, {2, 6}, {2, 8}, {0, 4}, {1, 5}},
{{0, 1}, {2, 5}, {1, 2}, {0, 5}, {2, 0}},
{{1, 3}, {2, 4}, {0, 8}, {0, 6}, {1, 6}},
{{0, 0}, {2, 3}, {1, 1}, {0, 7}, {2, 2}},
},
{ // 180
{{2, 1}, {1, 5}, {2, 0}, {1, 6}, {2, 2}},
{{0, 3}, {0, 4}, {0, 5}, {0, 6}, {0, 7}},
{{1, 0}, {2, 8}, {1, 2}, {0, 8}, {1, 1}},
{{2, 7}, {2, 6}, {2, 5}, {2, 4}, {2, 3}},
{{0, 2}, {1, 4}, {0, 1}, {1, 3}, {0, 0}},
},
{ // 270
{{2, 2}, {0, 7}, {1, 1}, {2, 3}, {0, 0}},
{{1, 6}, {0, 6}, {0, 8}, {2, 4}, {1, 3}},
{{2, 0}, {0, 5}, {1, 2}, {2, 5}, {0, 1}},
{{1, 5}, {0, 4}, {2, 8}, {2, 6}, {1, 4}},
{{2, 1}, {0, 3}, {1, 0}, {2, 7}, {0, 2}},
},
}
const (
ledRows = 3
ledCols = 9
)
type Device struct {
pin [ledCols + ledRows]machine.Pin
buffer [ledRows][ledCols]int8
rotation uint8
}
func (d *Device) assignPins() {
d.pin[0] = machine.LED_COL_1
d.pin[1] = machine.LED_COL_2
d.pin[2] = machine.LED_COL_3
d.pin[3] = machine.LED_COL_4
d.pin[4] = machine.LED_COL_5
d.pin[5] = machine.LED_COL_6
d.pin[6] = machine.LED_COL_7
d.pin[7] = machine.LED_COL_8
d.pin[8] = machine.LED_COL_9
d.pin[9] = machine.LED_ROW_1
d.pin[10] = machine.LED_ROW_2
d.pin[11] = machine.LED_ROW_3
for i := 0; i < len(d.pin); i++ {
d.pin[i].Configure(machine.PinConfig{Mode: machine.PinOutput})
}
}