[+] Backend reader

This commit is contained in:
Hykilpikonna
2023-04-20 19:56:44 -04:00
parent 986f0433d7
commit 3783da2bc4
+69
View File
@@ -0,0 +1,69 @@
"""
This script reads the Arduino's serial output and convert it to keyboard input.
Requirements: pip install pyserial keyboard matplotlib
"""
import time
import keyboard
import serial.tools.list_ports
TAIKO_KEYS = ['x', 'z']
if __name__ == '__main__':
# List serial ports
ports = serial.tools.list_ports.comports()
# If there are no ports, exit
if not ports:
print('No serial ports found!')
exit(1)
# If there are more than one serial port, print them out
if len(ports) > 1:
print('Multiple serial ports found:')
for i, port in enumerate(ports):
print(f'[{i}] {port.device}')
print()
# Ask the user to select one
inp = input('Select a port: ')
port = ports[int(inp)].device
# If there is only one serial port, use it
else:
port = ports[0].device
# Open the serial port
print(f'Opening serial port {port}...')
ser = serial.Serial(port, 115200)
# Read the serial port
try:
start_time = time.time()
while True:
line = ser.readline().decode('utf-8', errors='ignore').strip()
print(line)
# If the line starts with ";", it's a plot point
if line.startswith(';'):
line = line[1:].split(';')
ys = [float(y) / 1024.0 for y in line]
yleft, yright = ys
# If the line starts with ":", it's a keyboard input
elif line.startswith('Hit:'):
# Index of the drumstick that hit the piezo
line = line[4:]
cmd = line[0]
key = TAIKO_KEYS[int(line[1:])]
if cmd == "+":
keyboard.press(key)
elif cmd == "-":
keyboard.release(key)
except KeyboardInterrupt:
ser.close()
print('Closed serial port.')