Hi there,
I'm coding for an experiment but muddled with some trouble. My goal is to record the Oculus data(position, euler) every 50ms. At the same time, I need to mark some events, like below the events are 'cylinder is on', 'key pressed', 'cylinder is off'. So I put a variable called 'Event' and hope to change its value right after each event happens. Unfortunately, it didn't work.
I kind of know why it's not working. But is there any solution on that?
Thank you so much if anyone would like to help me out!!!
Code:
import viz
import vizact
import vizshape
import viztask
import vizinput
import vizinfo
import time
import random
import oculus
import vizfx
import numpy
from numpy import *
viz.go()
##### SET UP OCULUS
hmd = oculus.Rift()
oculus = viz.addGroup()
oculusView = viz.link(oculus, viz.MainView)
oculusView.preMultLinkable(hmd.getSensor())
oculusView.setOffset([0,0.5,-1])
def Demo():
global acc, RT, Keycode, trialNo, oculus, oculusView, Cond, FMM, Code_direct, Event, trial, block, unit, acc, RT, Keycode, trialNo, oculus, oculusView,oculus_timer, Group, Code_Type, Code_Letter, FirstTrial
FirstTrial = 1
Instr = vizshape.addCylinder(1,0.05)
Instr.setPosition(0,0,0)
Instr.color(0.5,0,0)
Instr.visible(viz.OFF)
yield viztask.waitTime(0.5)
Oculusdata = open('testtest'+ "_Oculus.txt",'a',1)
for trial in range(10):
###### Calculating Reaction Time
def df():
global startTime
startTime = viz.tick()
print str(trial), 'startTime', startTime
Instr.visible(viz.ON)
yield vizact.ontimer2(1,0,df)
Event = 0
def waitkeydown():
global r, KeyPress, startTime
r = yield viztask.waitKeyDown(None)
if r.key == 'j':
acc[0][trial] = 1
Keycode[0][trial] = 2 ### Key J is pressed
elif r.key == 'f':
acc[0][trial] = 0
Keycode[0][trial]= 1 ### Key F is pressed
yield viztask.waitAny([waitkeydown(), viztask.waitTime(3)])
Event = 1
Instr.visible(viz.OFF)
Event = 2
def printOculusData():
global oculus_timer
oculus_timer = viz.tick()
OculusData = "%s\t%s\t%s\t%s\t%s\n" %(trial, Event,oculus_timer,oculusView.getPosition(), oculusView.getEuler())
Oculusdata.write(OculusData)
if FirstTrial == 1:
vizact.ontimer(0.05,printOculusData)
FirstTrial = 0
viztask.schedule(Demo())