我正在使用Pyserial (+Python2.7)读取从眼球跟踪器(CRS Live-Track设置为串口)获取的眼球跟踪坐标。使用下面的代码,我能够成功地启动跟踪器,读取/保存一行坐标,停止跟踪器,然后关闭。我的问题是,我需要连续读取坐标,同时执行其他任务,如刺激显示。现在,当我读入数据('trial1 = ser.readline')时,我不能做任何事情。我必须等到读取完数据后才能继续。有没有一种方法可以在我显示激励/采集响应等时从串行端口连续读取数据?
我需要打开跟踪器,收集试验期间的数据,然后关闭跟踪器。
import serial, time
ser = serial.Serial(
port='COM3',
baudrate=9600,
parity=serial.PARITY_ODD,
stopbits=serial.STOPBITS_TWO,
bytesize=serial.SEVENBITS,
)
x = ser.is_open #check port is open
if x:
print "port is open"
print "port name is: %s" %(ser.name) #check which port
ser.flushInput()
ser.flushOutput()
running = True
while running:
ser.write('$Raw\r') #start eye-tracker
trial1 = ser.readline() #read a line
###i need to do stuff here###
ser.write('$Stop\r') #stop eye-tracker
running = False
ser.flushInput()
ser.flushOutput()
print trial1 #print coordinates output
ser.close()干杯,史蒂夫
发布于 2016-08-25 08:35:01
Sol Simpson的ioHub提供了从PsychoPy内部的异步设备监控。也就是说,它在一个完全独立的进程上运行,所以在监控主PsychoPy线程中的端口时,您不必暂停。
ioHub中的串口文档似乎很少,但这里有一个演示:https://github.com/psychopy/psychopy/blob/master/psychopy/demos/coder/iohub/serial/customparser.py
发布于 2016-08-29 21:03:09
另一种选择是尝试线程。你可以把你的眼球跟踪器放在一个线程中,而把剩下的代码放在另一个线程中。2010年有一个关于多线程的堆栈溢出answer (不使用精神病和眼球跟踪器)。如果你向下滚动,你会看到有人链接到一篇关于他们认为更容易更新的approach的博客文章。
https://stackoverflow.com/questions/39124386
复制相似问题