我一直在使用ArduinoIO-Matlab接口从Matlab控制Arduino。我目前的设置是我有3个EMG肌肉传感器(来自Advancer Technologies)通过模拟引脚1,2和3连接到Arduino。Arduino连接到Matlab。我试图从这三个引脚同时收集数据,并将它们存储在1000x3的矩阵中。我的问题是Matlab从模拟引脚采样的速率。从3个引脚同时收集1000个读数大约需要25秒。我知道arduino本身的采样率较高。以下是我的代码。我如何改变这个以在10秒内获得大约1000个样本的采样率?增加/改变Matlab-Arduino analogRead()采样率
ar = arduino('COM3');
ax = zeros(1000,3);
for ai = 1:1000
ax(ai,:) = [ar.analogRead(1) ar.analogRead(2) ar.analogRead(3)];
end
delete(ar);
这是上面的代码(配置文件查看器)所需的时间:
time calls line
< 0.01 1 3 ax = zeros(1000,3);
4
< 0.01 1 5 for ai = 1:1000
25.07 1000 6 ax(ai,:) = [ar.analogRead(1) ar.analogRead(2) ar.analogRead(3)];
1000 7 end
8
1.24 1 9 delete(ar);
请让我知道如果有别的东西,我需要澄清。 感谢:D enter code here
嗨穆罕默德。你能澄清一点吗?我需要在“adiosrv.pde”arduino代码的确切位置和方式中设置费率。我正在查看adiosrv.pde,但无法理解或找到我必须进行修改的位置。 –
我使用简单的IO方案(adiosrv.pde)。在代码中使用“case 30”(starts @ 217)执行模拟读取。而不是从arduino请求输入,读取一个输入并使用串行写入将它发送到Matlab,我做了以下操作: for(int i = 0; i <1000; ++ i) Serial.println(analogRead(pin) ); 您还需要修改matlab代码中的analogRead方法: for i = 1:1000 signal(i)= fscanf(a.ser,“%d”); end 更好的采样方法是对整个信号进行采样,然后通过串行将其发送回Matlab,但实际上这对我来说并没有解决(我所满意的是......) – Muhammad
好的。 Btw抱歉,迟到的回应。我的考试已经结束,所以我无法尝试。如果(val> 96 && val <113),则adiosrv.pde中的情况30具有 {pin = val-97; agv = analogRead(pin); \t Serial.println(agv); } s = -1; 休息; 我应该追加哪部分内容?此外,这仅适用于需要获取固定大小数据的情况。为了实时连续数据采集的目的,应该做什么? –