EECS151 / riscv-cpu / scripts / piano.py
piano.py
Raw
from pynput.keyboard import Key, Listener
import os
import serial


if os.name == 'nt':
    print('Windows machine!')
    ser = serial.Serial()
    ser.baudrate = 115200
    ser.port = 'COM11' # CHANGE THIS COM PORT
    ser.open()
else:
    print('Not windows machine!')
    ser = serial.Serial('/dev/ttyUSB0')
    ser.baudrate = 115200

keys_pressed = set()

def on_press(key):
    if key not in keys_pressed:
        print('{0} pressed'.format(
            key))
        ser.write(bytearray([0x80]))
        ser.write(bytearray([ord(key.char)]))
    keys_pressed.add(key)
    if key == Key.esc:
        # Stop listener
        return False

def on_release(key):
    print('{0} release'.format(
        key))
    if key in keys_pressed:
        keys_pressed.remove(key)
        ser.write(bytearray([0x81]))
        ser.write(bytearray([ord(key.char)]))
    if key == Key.esc:
        # Stop listener
        return False

# Collect events until released
with Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()