147 lines
2.9 KiB
Go
147 lines
2.9 KiB
Go
|
|
//go:build nicenano
|
||
|
|
// +build nicenano
|
||
|
|
|
||
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"image/color"
|
||
|
|
"machine"
|
||
|
|
|
||
|
|
"tinygo.org/x/drivers/encoders"
|
||
|
|
"tinygo.org/x/drivers/st7789"
|
||
|
|
"tinygo.org/x/drivers/ws2812"
|
||
|
|
)
|
||
|
|
|
||
|
|
const (
|
||
|
|
hardware_name = "NICEBADGE"
|
||
|
|
displayWidth = 240
|
||
|
|
displayHeight = 135
|
||
|
|
)
|
||
|
|
|
||
|
|
// UI layout constants for nicebadge (240x135)
|
||
|
|
const (
|
||
|
|
// myNameIs layout
|
||
|
|
cornerRadius = 10
|
||
|
|
topBandHeight = 20
|
||
|
|
bottomBandHeight = 10
|
||
|
|
helloY = 20
|
||
|
|
myNameIsY = 20
|
||
|
|
gophersY = 110
|
||
|
|
gophersX = 48
|
||
|
|
|
||
|
|
// menu layout
|
||
|
|
menuItemSpace = 20
|
||
|
|
menuCircleR = 6
|
||
|
|
|
||
|
|
numLEDs = 2
|
||
|
|
|
||
|
|
buttonBack = buttonB
|
||
|
|
)
|
||
|
|
|
||
|
|
var menuOptions = []int8{
|
||
|
|
modeBadge,
|
||
|
|
modeSchedule,
|
||
|
|
modeAdventure,
|
||
|
|
modeLEDs,
|
||
|
|
modeMusic,
|
||
|
|
modeGameSnake,
|
||
|
|
modeGameLife,
|
||
|
|
modeGameColors,
|
||
|
|
modeInfo,
|
||
|
|
}
|
||
|
|
|
||
|
|
// Font size thresholds for gopherbadge
|
||
|
|
const (
|
||
|
|
FontWidthThreshold = 300
|
||
|
|
)
|
||
|
|
|
||
|
|
var (
|
||
|
|
display st7789.Device
|
||
|
|
btnA machine.Pin
|
||
|
|
btnB machine.Pin
|
||
|
|
btnStart machine.Pin
|
||
|
|
|
||
|
|
ax machine.ADC
|
||
|
|
ay machine.ADC
|
||
|
|
enc *encoders.QuadratureDevice
|
||
|
|
)
|
||
|
|
|
||
|
|
func initHardware() {
|
||
|
|
machine.SPI0.Configure(machine.SPIConfig{
|
||
|
|
SCK: machine.P1_01,
|
||
|
|
SDO: machine.P1_02,
|
||
|
|
Frequency: 2.0 * machine.MHz,
|
||
|
|
Mode: 0,
|
||
|
|
})
|
||
|
|
|
||
|
|
machine.I2C1.Configure(machine.I2CConfig{
|
||
|
|
SDA: machine.P0_17,
|
||
|
|
SCL: machine.P0_20,
|
||
|
|
Frequency: 2.0 * machine.MHz,
|
||
|
|
})
|
||
|
|
display = st7789.New(machine.SPI0,
|
||
|
|
machine.P1_15, // TFT_RESET
|
||
|
|
machine.P1_13, // TFT_DC
|
||
|
|
machine.P0_10, // TFT_CS
|
||
|
|
machine.P0_09) // TFT_LITE
|
||
|
|
|
||
|
|
display.Configure(st7789.Config{
|
||
|
|
Rotation: st7789.ROTATION_90,
|
||
|
|
Width: 135,
|
||
|
|
Height: 240,
|
||
|
|
RowOffset: 40,
|
||
|
|
ColumnOffset: 53,
|
||
|
|
//FrameRate: st7789.FRAMERATE_111,
|
||
|
|
//VSyncLines: st7789.MAX_VSYNC_SCANLINES,
|
||
|
|
})
|
||
|
|
|
||
|
|
neo := machine.P1_11
|
||
|
|
neo.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
||
|
|
leds = ws2812.New(neo)
|
||
|
|
|
||
|
|
bzrPin = machine.P0_31
|
||
|
|
bzrPin.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
||
|
|
|
||
|
|
//pwm := machine.PWM0
|
||
|
|
//speaker, _ := tone.New(pwm, bzrPin)
|
||
|
|
|
||
|
|
machine.InitADC()
|
||
|
|
ax = machine.ADC{Pin: machine.P0_02}
|
||
|
|
ay = machine.ADC{Pin: machine.P0_29}
|
||
|
|
ax.Configure(machine.ADCConfig{})
|
||
|
|
ay.Configure(machine.ADCConfig{})
|
||
|
|
|
||
|
|
enc = encoders.NewQuadratureViaInterrupt(machine.P1_00, machine.P0_24)
|
||
|
|
enc.Configure(encoders.QuadratureConfig{
|
||
|
|
Precision: 4,
|
||
|
|
})
|
||
|
|
|
||
|
|
btnStart = machine.P0_22
|
||
|
|
btnA = machine.P1_06
|
||
|
|
btnB = machine.P1_04
|
||
|
|
btnStart.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
|
||
|
|
btnA.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
|
||
|
|
btnB.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
|
||
|
|
|
||
|
|
black := color.RGBA{0, 0, 0, 255}
|
||
|
|
display.FillScreen(black)
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
func getInput() {
|
||
|
|
for b := 0; b < 9; b++ {
|
||
|
|
buttonsOldState[b] = buttonsState[b]
|
||
|
|
}
|
||
|
|
|
||
|
|
buttonsState[buttonA] = !btnA.Get()
|
||
|
|
buttonsState[buttonB] = !btnB.Get()
|
||
|
|
buttonsState[buttonStart] = !btnStart.Get()
|
||
|
|
|
||
|
|
buttonsState[buttonLeft] = (ax.Get() < 12000)
|
||
|
|
buttonsState[buttonRight] = (ax.Get() > 52000)
|
||
|
|
buttonsState[buttonDown] = (ay.Get() < 12000)
|
||
|
|
buttonsState[buttonUp] = (ay.Get() > 52000)
|
||
|
|
}
|
||
|
|
|
||
|
|
func Accel3D() {}
|