[+] Backend reader
This commit is contained in:
@@ -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.')
|
||||||
Reference in New Issue
Block a user