Pyserial / Eye-tracker:从串口读取,同时显示刺激

时间:2016-08-24 13:14:30

标签: python-2.7 pyserial psychopy

我正在使用Pyserial(+ Python 2.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()

干杯, 史蒂夫

2 个答案:

答案 0 :(得分:1)

Sol Simpson的ioHub提供了PsychoPy内的异步设备监控功能。即它在一个完全独立的进程上运行,因此您不必在监视主PsychoPy线程中的端口时暂停。

ioHub中的串口文档似乎很少,但这里有一个演示:https://github.com/psychopy/psychopy/blob/master/psychopy/demos/coder/iohub/serial/customparser.py

答案 1 :(得分:1)

另一种选择是尝试线程。您可以将眼动仪放在一个线程中,将其余代码放在另一个线程中。从2010年开始,有关于多线程(不使用心理学和眼动仪)的堆栈溢出answer。如果向下滚动,您将看到有人链接到博客帖子,其中有关他们认为更容易的更新approach