在MATLAB中为Arduino设置采样率

时间:2013-06-22 16:39:52

标签: matlab loops time arduino sampling

我无法使用我正在使用的代码获得一致的结果。我想在特定的时间内(例如20秒)运行我的Arduino,并以特定的采样率(比如每秒四个样本)从模拟引脚收集数据。代码如下。

a_pin = 0;
tic;
i = 0;

while toc < 20
    i = i + 1;
    time(i) = toc;
    v(i) = a.analogRead(a_pin);
    pause(.25);
end

有没有办法设置循环运行一个特定的时间,然后在循环样本中以不同的速率运行?

3 个答案:

答案 0 :(得分:0)

你可以试试这个:

a_pin = 0;

fs = 4;   % sampling frequency (samplings per second)
mt = 20;  % time for measurements

ind = 1;
nind = 1;
last_beep = 0;
tic;
while toc < mt

    time(ind) = toc;
    v(ind) = a.analogRead(a_pin);

    % wait for appropriate time for next measurement
    while( nind == ind )
        nind = floor(toc*fs) + 1;
    end
    ind = nind;

    % beep every second
    if (ceil(toc) > last_beep)
        beep(); % don't know if this one exist, check docs
        last_beep = ceil(toc);
    end
end 

答案 1 :(得分:0)

单个Arduino模拟读取命令的最大采样时间约为0.04秒,实际上我的最小值为0.05。添加两个读取操作的顺序为2 * 0.04,实际上更像是0.1秒。我认为它主要受USB通信速度的限制。

答案 2 :(得分:-1)

我也是arduino的新手,但是使用它实现了对EEG的实时分析,在实践中,我能够采样具有57到108Hz之间的samplinf频率的2个模拟通道。它变化很大(通过tic / toc计算),但在我的情况下它仍适用于实时处理。

我的代码使用While循环,一系列内存更新,数字引脚操作,跟踪绘图(drawow)并且似乎运行得足够顺利

我的答案就在这里:0.0283秒,我的情况下采样2个模拟输入。

干杯