2017-02-01 20 views
0

まずMatlabからArduinoにデータを送信し、arduinoがこのデータを処理し、Matlabにメッセージを送り、新しいものを送信します。しかし、この定期的なコミュニケーションは非常に遅いです。遅い定期的なコミュニケーションmatlab-arduino

これは私のMatlabのコードです:

for i =1:nbr 
arduino_serial= serial('/dev/cu.wchusbserial1410'); 
set(arduino_serial,'BaudRate',9600); 
set(arduino_serial,'Terminator','CR'); 
fopen(arduino_serial); 
pause(1); 

A_string = strcat(num2str(tabx(i)),',',num2str(taby(i)),',',num2str(pression_ref)); 

%Send 
fprintf(arduino_serial,A_string); 
%Receive from Arduino 
while (strcmp('Ready',fscanf(arduino_serial,'%f'))==0) 
end 
fclose(arduino_serial); 
delete (arduino_serial); 
end 

Arduinoの中に私のセットアップは、次のとおりです。

Serial.begin(9600);  // opens serial port, sets data rate to 9600 bps 
Serial.setTimeout(100); 

定期的にデータを送信するための別の方法はありますか?

ありがとうございます。

+2

「ゆっくり」とはどういう意味ですか?とにかくポートを送信の間に開いたままにすることができます。 – frarugi87

+0

'' BaudRate '、9600'は遅いです。あなたが遅いと言う時、それはそれよりも遅いという意味ですか? –

+0

「どのデータスループットが必要ですか?」と答えてみてください。次に、2つの選択肢があります。それに応じてボーレートを調整するか、SPIのような高いスループットで別の通信プロトコルを試してください – Emilien

答えて

0

あなたの説明から、あなたのコードは適切ではないと思います。私はMatlabがarduinoから 'ready'を待っていることを理解しました。そして、それはすぐに新しいメッセージを送ることができます。したがって、シリアルを閉じて毎回それを開く必要はありません。この部分は少なくとも1秒の遅延を加えます!

あなたはforループの外側に開閉式シリアルを入れなければなりません。

信頼性を高めるため、sleep(1)sleep(2)に増やす必要があります。

また、arduinoシリアルバッファにはガベージが存在することがあります。これに遭遇した場合、arduinoシリアルからバッファを空にする(sleep(2)命令の直後)ことがあります。

+0

ありがとうございます。それは働いている –

関連する問題