#!/usr/bin/env python import sys import os import time import pygame import pygame.midi from pygame.locals import * import serial mchannel = 1 istatB = 0 inoteB = 0 iveloB = 0 sport = "/dev/ttyACM0" # RPI arduinoline = "" MIDIbytes = 0 # _________________________________________________________________ def read_USB() : global ser, MIDIbytes, midi_out,istatB,inoteB,iveloB,arduinoline while ser.isOpen() : arduinoline = ser.readline() arduinoline = arduinoline.strip('\r\n') MIDIbytes=len(arduinoline) if ( MIDIbytes == 3 ) : istatB = ord(arduinoline[0]) inoteB = ord(arduinoline[1]) iveloB = ord(arduinoline[2]) midi_out.write_short(istatB,inoteB,iveloB) else: # use for diagnostic arduino print ": %sB :%s" % (str(MIDIbytes),arduinoline) del midi_out pygame.midi.quit() pygame.quit() ser.close() sys.exit() # _________________________________________________________________ def main(): global DISPLAYSURF, ser, midi_out, mchannel,iveloB,inoteB pygame.init() pygame.midi.init() port = pygame.midi.get_default_output_id() midi_out = pygame.midi.Output(port) try: print "i try open %s" % (sport) ser = serial.Serial(sport, 115200, timeout=20) # arduino except Exception as ex: print "Failed to connect to port on: ", ser time.sleep(2) # to let you read the ports ser.close() raise ex while 1: read_USB() ser.close() pygame.midi.quit() pygame.quit() sys.exit() # _________________________________________________________________ if __name__ == '__main__': main()