我一直在使用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; 休息; 我應該追加哪部分內容?此外,這僅適用於需要獲取固定大小數據的情況。爲了實時連續數據採集的目的,應該做什麼? –