2013-06-22 78 views
2

我无法获得与我正在使用的代码一致的结果。我想运行我的Arduino一段特定的时间(比如20秒),并以特定的采样率(例如每秒四个采样)从模拟引脚收集数据。代码如下。在MATLAB中为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 

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

回答

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 
+0

似乎很好的工作!非常感谢 !你知道最大采样频率是多少? – user2512053

+0

如果它帮助你解决你的问题,请接受答案(答案左侧的绿色选中标记)。最大采样频率将受到硬件的限制(我的猜测)。 Matlab最终的局限是'tic' /'toc'函数的分辨率*非常精确*(更多内容请参考http://www.mathworks.com/company/newsletters/articles/improvements-to-tic-和-TOC函数换测量绝对-经过时间 - 性能 - 在-matlab.html))。 – plesiv

+1

新的论坛不知道你接受的解决方案......但我只是做到了。再次感谢您的帮助 – user2512053

0

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

-1

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

我的代码使用While循环,一系列的记忆力更新,数字引脚操作,跟踪的情节(的DrawNow),似乎得够顺利

我的回答可以是简单的位置:0.0283秒的采样2个模拟输入在我的情况。

干杯