nicebadge/tutorial/basics/step10/main.go

50 lines
954 B
Go
Raw Normal View History

2026-04-18 11:01:06 +00:00
package main
import (
"machine"
2026-04-19 16:29:28 +00:00
"machine/usb/adc/midi"
2026-04-18 11:01:06 +00:00
"time"
)
func main() {
2026-04-19 16:29:28 +00:00
// buttons: active LOW (internal pull-up)
2026-04-18 11:01:06 +00:00
btnA := machine.P1_06
btnB := machine.P1_04
2026-04-19 16:29:28 +00:00
btnRot := machine.P0_22 // rotary encoder push button
2026-04-18 11:01:06 +00:00
btnA.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
btnB.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
2026-04-19 16:29:28 +00:00
btnRot.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
2026-04-18 11:01:06 +00:00
2026-04-19 16:29:28 +00:00
// C major triad: C4, E4, G4
notes := []midi.Note{midi.C4, midi.E4, midi.G4}
midichannel := uint8(1)
2026-04-18 11:01:06 +00:00
2026-04-19 16:29:28 +00:00
note := -1
oldNote := -1
2026-04-18 11:01:06 +00:00
for {
2026-04-19 16:29:28 +00:00
note = -1
2026-04-18 11:01:06 +00:00
if !btnA.Get() {
2026-04-19 16:29:28 +00:00
note = 0 // C4
2026-04-18 11:01:06 +00:00
}
if !btnB.Get() {
2026-04-19 16:29:28 +00:00
note = 1 // E4
}
if !btnRot.Get() {
note = 2 // G4
}
if note != oldNote {
if oldNote != -1 {
midi.Midi.NoteOff(0, midichannel, notes[oldNote], 50)
}
if note != -1 {
midi.Midi.NoteOn(0, midichannel, notes[note], 50)
}
oldNote = note
2026-04-18 11:01:06 +00:00
}
time.Sleep(100 * time.Millisecond)
}
}