Чтение ввода последовательного порта - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть кнопка, подключенная через адаптер последовательного порта к порту USB.

Окно кнопок имеет 5 кнопок. Я пытаюсь записать, какая кнопка была нажата (и когда). Пока остановлюсь на какой кнопке. Код будет использоваться в эксперименте PsychoPy.

Что я делаю до сих пор, так это:

import serial
import serial.tools.list_ports as port_list
ports = list(port_list.comports()) # search for the devices
#for p in ports: print (p)

ser = serial.Serial('/dev/ttyUSB0', 19200, timeout=1)


if(ser.isOpen() == False): #open the serial port only if NOT open yet
    ser.open()

ser.flushInput() #erase all info in the box about previous button-presses

print("connected to: " + ser.portstr)

line = ser.read()
print(chr(line))
ser.close()

Однако, если я сделаю это, я получу следующую ошибку:

TypeError: an integer is required

Если я проверю line после нажатия кнопки я получаю следующее значение:

'\x02'

Значение изменяется в зависимости от нажатой кнопки: '\x02', '\x03' et c. Похоже, что он, по крайней мере, обнаруживает нажатие правой кнопки.

Последнее, что я попытался сделать, это следующее. Чтобы преобразовать строку в целое число, я попытался заменить '\x0':

line
a=str(line)
a.replace('\x0', "")
a

И я получаю следующую ошибку:

ValueError: invalid \x escape

1 Ответ

0 голосов
/ 25 февраля 2020

'\x02' - экранированный код для строки, содержащей ОДИН символ с значением (ascii / ansi / unicode) 2. Длина вашей строковой переменной - 1 символ. Попробуйте len(line)

Если вы хотите напечатать номер кнопки, извлекая значение этого символа, попробуйте: print(ord(line[0]))

...