| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- import time
- from machine import UART
- from machine import ADC
- import uos
- from midi.midiout import MidiOut
- from midi import constants_min
- from midipins import StatePin, PitchWheel
- import midipins
- DEBUG = 0
- midiout = None
- def main():
- global DEBUG
- global midiout
- led = machine.Pin(2 , machine.Pin.OUT)
- adc_pin = 0
- adc = ADC(adc_pin)
- but = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP)
- # wheel = PitchWheel(adc, size=128)
- pins = [
- machine.Pin(12, machine.Pin.OUT),
- machine.Pin(14, machine.Pin.OUT),
- machine.Pin(4 , machine.Pin.OUT),
- machine.Pin(5 , machine.Pin.OUT),
- ]
- volume = PitchWheel(adc.read, size=128)
- volume.pins = pins
- volume.values = [1,0,0,0]
- modeswitch = PitchWheel(adc.read, size=6)
- modeswitch.pins = pins
- modeswitch.values = [0,0,0,0]
- reset_midi()
- print("\nWaiting for Interrupt....")
- time.sleep(3)
- if but.value() == 1:
- DEBUG = 0
- else:
- DEBUG = 1
- midipins.DEBUG = DEBUG
- if not DEBUG:
- print("\nDetaching Terminal for MIDI....")
- uos.dupterm(None, 1)
- uart = UART(0, baudrate=115200)
- midiout = MidiOut(uart)
- midiout.all_notes_off()
- midiout.all_sound_off()
- # midiout.reset_all_controllers()
- midiout.program_change(0) # Acoustic Piano per General MIDI standard
- # midiout.control_change(constants_min.LEGATO_ONOFF, 0)
- # midiout.control_change(constants_min.LEGATO_ONOFF, 127)
- # # Send all sound off to prevent hanging notes
- TNULL = time.ticks_ms()
- TONE = None
- while True:
- time.sleep_ms(1)
- led.value(0 if DEBUG else 1)
- modeswitch.poll(set_mode)
- volume.poll(lambda v:midiout.volume(v))
- if DEBUG:
- TONE = time.ticks_ms()
- print("Poll done:", TONE - TNULL)
- TNULL = TONE
- # wheel.poll(lambda v:midiout.channel_message(constants_min.PROGRAM_CHANGE,(v+1)))
- # wheel.poll(midiout.pitch_bend)
- def set_mode(val):
- global DEBUG
- global midiout
- if val == 4:
- import uos
- uos.dupterm(None, 1)
- DEBUG = 0
- elif val == 5:
- import machine
- import uos
- uart = machine.UART(0, 115200)
- uos.dupterm(uart, 1)
- DEBUG = 1
- if val < 5:
- midiout.program_change(val)
- midipins.DEBUG = DEBUG
- def midi_note(midiout, val, note=64, led = None):
- if led:
- led.value(val)
- if val == 0:
- midiout.note_on(note, velocity=100)
- else:
- midiout.note_off(note)
- def reset_midi():
- import machine
- import uos
- uos.dupterm(None, 1)
- uart = machine.UART(0, 115200)
- mdo = MidiOut(uart)
- mdo.all_notes_off()
- mdo.all_sound_off()
- # mdo.reset_all_controllers()
- uart = machine.UART(0, 115200)
- uos.dupterm(uart, 1)
- if __name__ == "__main__":
- try:
- main()
- except Exception as ex:
- reset_midi()
- raise ex
|