慢周期通信matlab-arduino
Slow periodic communication matlab-arduino
首先我从 Matlab 向 Arduino 发送数据,然后 arduino 处理这些数据并向 Matlab 发送一条消息 'Ready' 以向他发送一个新的。但是这种周期性的沟通很慢。
这是我的 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);
还有其他发送周期性数据的方法吗?
谢谢
从你的解释来看,我认为你的代码不太贴切。我了解到 Matlab 等待来自 arduino 的 'ready',然后它可以立即发送新消息。因此,您不必每次都关闭并重新打开它;这部分至少增加了1s的延迟!
您必须将打开和关闭序列放在 for 循环之外。
为了可靠性,您应该将 sleep(1)
增加到 sleep(2)
。
而且在你打开之前,arduino串口缓冲区中可能有垃圾;如果你遇到这种情况,那么你可以从 arduino 串行读取以清空缓冲区(就在 sleep(2) 指令之后)。
首先我从 Matlab 向 Arduino 发送数据,然后 arduino 处理这些数据并向 Matlab 发送一条消息 'Ready' 以向他发送一个新的。但是这种周期性的沟通很慢。
这是我的 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);
还有其他发送周期性数据的方法吗?
谢谢
从你的解释来看,我认为你的代码不太贴切。我了解到 Matlab 等待来自 arduino 的 'ready',然后它可以立即发送新消息。因此,您不必每次都关闭并重新打开它;这部分至少增加了1s的延迟!
您必须将打开和关闭序列放在 for 循环之外。
为了可靠性,您应该将 sleep(1)
增加到 sleep(2)
。
而且在你打开之前,arduino串口缓冲区中可能有垃圾;如果你遇到这种情况,那么你可以从 arduino 串行读取以清空缓冲区(就在 sleep(2) 指令之后)。