private void Update() { // Write Frame Data frameData = new float[1, 16]; FRAME++; frameData[0, (int)FrameData.trial] = TRIAL + 1; frameData[0, (int)FrameData.block] = BLOCK + 1; frameData[0, (int)FrameData.frame] = FRAME; if (TRIAL == N.trialsTotal) { QuitGame(); } trigger = PortAccess.Input(Port.port[0]); timeElapsed = Time.time - startTime; switch (state) { case State.Inactive: if (!Options.recordEEG) { StartNewTrial(); } else if (trigger == 0) { StartNewTrial(); } break; case State.BlockRest: if (!UIEnd.activeSelf) { if (BLOCK != 0) { foreach (Text tt in EndText) { tt.text = "Please sit still and wait for the next block."; } } else { foreach (Text tt in EndText) { tt.text = "Please sit still and wait for the start of the experiment."; } } UIEnd.SetActive(true); startTime = Time.time; } if (BLOCK == 0 || timeElapsed > Seconds.blockRest) { if (BLOCK != 0) { foreach (Text tt in EndText) { tt.text = "BLOCK " + BLOCK.ToString() + " of " + (N.blocks - 1).ToString() + " blocks"; } } if (Input.GetKeyUp(KeyCode.Space)) { UIEnd.SetActive(false); state = State.Inactive; PortAccess.Output(Port.port[0], Trig.initAnalysis); } } break; case State.TrialRest: RunTrialRest(); break; case State.Trial: RunTrial(); break; case State.Feedback: if (timeElapsed > Seconds.feedback) { EndTrial(); } break; } frameData[0, (int)FrameData.time] = Time.time; frameData[0, (int)FrameData.trigger] = PortAccess.Input(Port.port[0]); frameData[0, (int)FrameData.state] = (int)state; for (int i = 0; i < N.players; i++) { frameData[0, i * 5 + 6] = movement[0, i]; frameData[0, i * 5 + 7] = movement[1, i]; frameData[0, i * 5 + 8] = players[i].transform.position.x; frameData[0, i * 5 + 9] = players[i].transform.position.z; frameData[0, i * 5 + 10] = players[i].hit; } Write2D(frameData, Str.frameMatrixTXT); }
private void Input() { int i = 0; i = PortAccess.Input(PORT888); if (i == 128) { D7 = 1; } else { D7 = 0; } if (i == 64) { D6 = 1; } else { D6 = 0; } if (i == 32) { D5 = 1; } else { D5 = 0; } if (i == 16) { D4 = 1; } else { D4 = 0; } if (i == 8) { D3 = 1; } else { D3 = 0; } if (i == 4) { D2 = 1; } else { D2 = 0; } if (i == 2) { D1 = 1; } else { D1 = 0; } if (i == 1) { D0 = 1; } else { D0 = 0; } i = PortAccess.Input(PORT898); if (i == 128) { BUSY = 0; } else { BUSY = 1; } if (i == 64) { ACK = 0; } else { ACK = 1; } if (i == 32) { PE = 0; } else { PE = 1; } if (i == 16) { SLCT = 0; } else { SLCT = 1; } if (i == 8) { ERROR = 0; } else { ERROR = 1; } i = PortAccess.Input(PORT890); if (i == 8) { SELECT_IN = 1; } else { SELECT_IN = 0; } if (i == 4) { INIT = 1; } else { INIT = 0; } if (i == 2) { AUTOFEED = 1; } else { AUTOFEED = 0; } if (i == 1) { STROBE = 1; } else { STROBE = 0; } }
private void ControlLoop() { if (TRIAL == -1) { InitialiseTrial(); return; } switch (isViewingChat) { case false: if (FRAME == Frames.trial & !isPaused) { InitialiseTrial(); } if (FRAME < Frames.trial) { switch (CM.stimulus[FRAME]) { case 1: // CUE if (isVirtualPhotodiode) { SendParallel(CM.frames[FRAME], target[TRIAL] + 1, Port.port[0]); // works if frame rate locked } else if (!isVirtualPhotodiode) { if (isTestingNow) { SendParallel(CM.frames[FRAME], 29, Port.port[0]); // works if frame rate locked } else if (!isTestingNow) { SendParallel(CM.frames[FRAME], target[TRIAL] + 1, Port.port[0]); // works if frame rate locked } } DisplayCue(); /////////////////////////////////////////////// BCI if (isTestingNow) { RealtimeFeedback(); } break; case 2: // FLICKER if (isVirtualPhotodiode) { SendParallel(CM.frames[FRAME], target[TRIAL] + 101, Port.port[0]); // works if frame rate locked } else if (!isVirtualPhotodiode) { if (isTestingNow) { SendParallel(CM.frames[FRAME], 129, Port.port[0]); // works if frame rate locked } else if (!isTestingNow) { SendParallel(CM.frames[FRAME], target[TRIAL] + 101, Port.port[0]); // works if frame rate locked } } DisplayFlicker(); break; } // frameData frameData.TRIAL.Add((float)TRIAL); // try multi-threading the save in future frameData.FRAME.Add(FRAME); frameData.trigger.Add(PortAccess.Input(Port.port[0])); frameData.deltaTime.Add(Time.deltaTime); frameData.lum.Add(LUM); frameData.cmFrames.Add((float)CM.frames[FRAME]); frameData.cmStimulus.Add((float)CM.stimulus[FRAME]); frameData.cmTrigger.Add((float)CM.trigger[FRAME]); frameData.letterClassified.Add(letterClassified); // frameData.flipTimeStart, frameData.flipTimeStop FRAME++; if (isTrain & TRIAL < nTrialsTrain & FRAME == 72) // 0.5 s completed, skip ahead to flicker, assumes 144 Hz { FRAME = 108; } } break; case true: DisplayChat(); break; } }