我无法使用我正在使用的代码获得一致的结果。我想在特定的时间内(例如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
有没有办法设置循环运行一个特定的时间,然后在循环样本中以不同的速率运行?
答案 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个模拟输入。
干杯