コード例 #1
0
    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);
    }
コード例 #2
0
        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;
            }
        }
コード例 #3
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;
        }
    }