Python 精神病患者的串口过载
我正在使用一个通过串口连接的按钮盒来进行心理变态实验Python 精神病患者的串口过载,python,python-2.7,serial-port,pyserial,psychopy,Python,Python 2.7,Serial Port,Pyserial,Psychopy,我正在使用一个通过串口连接的按钮盒来进行心理变态实验 from binascii import hexlify 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, bytes
from binascii import hexlify
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, bytesize=8, parity='N', stopbits=1, timeout=0)
if(ser.isOpen() == False): #open the serial port only if NOT open yet
ser.open()
ser.flush()
在实验中,我有4个例程。假设每个例程包含一个书面文本,相应地text\u 1
,text\u 2
,text\u 3
和text\u 4
。例如,如果参与者在text\u 1
中,并且他/她单击按钮,则实验移动到text\u 2
然而,我面临以下问题。如果参与者在text_1
中并快速按下两次按钮,实验将移动到text_3
而不是text_2
,好像有什么东西在存储信息。相反,我希望如果您在text_1
中按两次,则只考虑第一次按
每个文本
代码都是这样的
ser.flush()
for line in ser.read(1):
hex = hexlify(line)
num_1=int(hex, 16)
continueRoutine = False #this makes the experiment go to the next text
我可以添加什么使它看起来没有信息存储(如果这是真的发生的话)?串行端口通信被缓冲,这意味着有消息的临时存储。如果参与者在一次试验中多次按下按钮框,这些按下的按钮将存储在缓冲区中。当您从串行端口读取时,您将读取缓冲消息 为了解决您的问题,您可以在每次试用开始时清除串行端口缓冲区。使用此方法完成此操作。以下是有关此方法的文档:
reset\u input\u buffer()
刷新输入缓冲区,丢弃其所有内容
有关缓冲通信的出色类比,请参阅: 想象你正在吃碗里的糖果。你经常吃一片。为了防止碗里的糖用完,可能会有人在碗空之前把碗装满,这样当你想再吃一块时,碗里就有糖果了 碗在你和糖果袋之间起缓冲作用
你能不能加入一个
时间。sleep
呼叫,让参与者等待一定的时间才能继续?我尝试过,但问题没有解决(如果我做得正确),因为按钮框仍会记录所有按下的动作,只有压力机的效果会被延迟。到目前为止,我找到的唯一彻底的解决方案是在每个文本组件的开头和结尾使用ser.close()
和ser.open()
。与其关闭和打开端口,不如尝试在每个文本组件的开头清除缓冲区。我不确定是否应该清除输入或输出缓冲区,但这两种方法都可用。我不知道这一点。它似乎工作得很好,是的,它是输入端,ser.reset\u input\u buffer()
。