package main import ( "machine" "time" "tinygo.org/x/drivers/encoders" ) const deadzone = 5000 func main() { btnA := machine.P1_06 btnB := machine.P1_04 btnC := machine.P0_22 // rotary encoder push button btnA.Configure(machine.PinConfig{Mode: machine.PinInputPullup}) btnB.Configure(machine.PinConfig{Mode: machine.PinInputPullup}) btnC.Configure(machine.PinConfig{Mode: machine.PinInputPullup}) enc := encoders.NewQuadratureViaInterrupt(machine.P1_00, machine.P0_24) enc.Configure(encoders.QuadratureConfig{Precision: 4}) machine.InitADC() ax := machine.ADC{Pin: machine.P0_02} ay := machine.ADC{Pin: machine.P0_29} ax.Configure(machine.ADCConfig{}) ay.Configure(machine.ADCConfig{}) prevA := true prevB := true prevC := true prevPos := enc.Position() for { a := btnA.Get() b := btnB.Get() c := btnC.Get() if !a && prevA { println("button A pressed") } if !b && prevB { println("button B pressed") } if !c && prevC { println("encoder button pressed") } prevA = a prevB = b prevC = c pos := enc.Position() if pos != prevPos { println("encoder:", pos) prevPos = pos } rawX := int(ax.Get()) - 32767 rawY := int(ay.Get()) - 32767 if rawX > deadzone || rawX < -deadzone || rawY > deadzone || rawY < -deadzone { println("joystick:", "x=", rawX, "y=", rawY) } time.Sleep(50 * time.Millisecond) } }