私が達成しようとしていることの簡単な説明: 私は、コンピューター画面上のカーソルを制御するために使用されるポテンショメーターを備えた水平に取り付けられたレバーを持っています。これには、Windows XP マシンで Matlab 2011a と Psychtoolbox および Data Acquisition Toolbox を使用します。DAQはAgilent U2300 Aです。多くの異なるアプローチの後、私はこれになりました(サンプルコード):
ai = analoginput('agilentu2300', 0); % creates the analog object with our card
ch = addchannel(ai,1); % adds the channel for the potentiometer
set(ai,'InputType','SingleEnded'); % generates absolute values
set(ai,'SampleRate',1000); % sampling rate
set(ai,'SamplesPerTrigger',Inf); % continuous recording
start(ai); % starts the analog object
running = 1;
while running == 1
mySample = getData(ai,1) % acquire one sample
drawThisOnTheScreenAtXCoordinate(mySample); % drawsample on screen
experimentEnded = isExperimentOver(); % check wether experiment is over
if experimentEnded == 1 % decide wether to quit the program
running = 0;
end
end
stop(ai) % stops the analog objects
experimentData = getData(ai); % acquires all written data
これは機能しています。時間チェックも含めたので、この while ループは CPU が許容する速度で実行されません。毎秒約 200 ループに制限されており、同じ数のサンプルを取得できます。しかし実際には、これらは別個のサンプルではありません。個別のサンプルを確認すると、1 秒あたり約 15 の異なるサンプルが取得されるため、15 Hz では、画面上でカーソルをスムーズに移動するには不十分です。また、コマンド getSample を使用してみましたが、同じ結果が得られました。
私は何か間違ったことをしていて、誰かがそれを別の方法で行う方法を知っていることを願っています. また、さまざまな言語 (できれば Python) や、場合によってはさまざまな DAQ ハードウェアを使用したさまざまなアプローチの推奨事項も受け入れます。