Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 精神病患者的串口过载_Python_Python 2.7_Serial Port_Pyserial_Psychopy - Fatal编程技术网

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()