我在Windows 7计算机上使用Psychopy v1.82.01(编码器视图)来运行fMRI实验。我想从并行端口读取data()(用于记录按钮按下以及从扫描器接收触发器以进行同步)。但是,当我使用readData()或readPin()时,所有引脚似乎都保持低电平('0')。
为了进行健全性检查,我尝试从Presentation中的端口读取数据(检查设备是否工作/正确的地址/等),这可以识别按下按钮。奇怪的是,如果我在PsychoPy shell(使用readData()和readPin())并且Presentation已打开,并打开'port test'窗口,那么它确实有效!此外,如果我从Presentation发送数据到端口,那么我可以在PsychoPy中读到这个(所以我相当自信我的代码很好)。 setData()函数工作正常,我只是难以读取数据。
我使用的代码是:
from psychopy import parallel
button = parallel.ParallelPort(0x2010)
while True:
if button.readPin(5) !=0:
break
print 'value received'
我对并行端口或并行功能的“幕后”工作并不十分自信,但似乎是在读取端口时存在某种访问问题,在Presentation访问时会被覆盖端口,但我从PsychoPy使用的功能无法自行管理?这可行吗?
任何关于从哪里开始修复此问题的想法都将非常感谢!!
答案 0 :(得分:1)
终于搞定了!如果其他人有类似的问题,在函数' init '的_inpout32.py文件(/parallel/_inpout32.py)中有一个命令切换到控制寄存器的第5位。我复制了这个命令并将其包含在 setData()函数中,然后在 readData()中我改变了这一点,因此第5位为高(输入参数是基址+ 2,和32):
self.port.Out32(self.base + 2, 32)
可能会引发更多不可预见的问题,但现在看起来似乎有用了!