2017-02-01 2 views
0

Zuerst sende ich Daten an Arduino von Matlab, dann Arduino fortfahren diese Daten und senden Sie eine Nachricht "Bereit" zu Matlab, um ihm ein neues zu senden. Aber diese periodische Kommunikation ist sehr langsam.Langsame periodische Kommunikation Matlab-Arduino

Das ist mein Matlab-Code:

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 

Mein Setup in Arduino ist:

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

Gibt es eine andere Art und Weise periodische Daten zu senden?

Danke

+2

Was meinst du mit "langsam"? Wie auch immer, Sie können den Port zwischen den Übertragungen offen lassen. – frarugi87

+0

''BaudRate', 9600' ist langsam. Wenn du langsam sagst, meinst du langsamer? –

+0

Versuchen Sie zu beantworten "Welchen Datendurchsatz benötigen Sie?". Dann zwei Möglichkeiten: Passen Sie die Baudrate entsprechend an oder versuchen Sie ein anderes Kommunikationsprotokoll mit einem höheren Durchsatz wie SPI – Emilien

Antwort

0

Von Ihrer Erklärung glaube ich, dass Ihr Code nicht geeignet ist. Ich habe verstanden, dass Matlab von Arduino "fertig" wartet, dann kann es sofort die neue Nachricht senden. Daher müssen Sie die serielle Verbindung nicht schließen und sie jedes Mal erneut öffnen. dieser Teil fügt eine Verzögerung von mindestens 1s hinzu!

Sie müssen öffnende und schließende Serien außerhalb Ihrer for-Schleife setzen.

Für die Zuverlässigkeit sollten Sie sleep(1) auf sleep(2) erhöhen.

Außerdem kann es in arduino seriellen Puffer Müll geben, bevor Sie es öffnen; Wenn Sie dies bemerken, dann können Sie von arduino serial lesen, um den Puffer zu leeren (direkt nach der Anweisung sleep (2)).

+0

Vielen Dank. Es funktioniert –

Verwandte Themen