我让Arduino只输出一组一致的数字到COM端口。 Matlab正在读取COM端口,成功读取的次数约为10次。其他时候它在第一行添加一两个额外的字符。通常这是一个带有某种口音的字母。下面是Matlab和Arduino的代码。什么可以添加额外的字符?
Arduino代码
int output1, output2, output3, area;
void setup()
{
Serial.begin (9600)
}
void loop()
{
output1 = 2.0;
output2 = 2.1;
output3 = 3.7;
delay(5);
Serial.print(2.0);
Serial.print(',');
Serial.print(2.1);
Serial.print(',');
Serial.println(3.7);
}
Matlab代码
clear all
close all
Serialport='com3';
MaxDeviation=3;
TimeInterval=0.2;
loop=120;
s = serial(Serialport);
distance1(1)=0;
time(1)=0;
count = 2;
k=1;
fopen (s);
while ~isequal(count,loop)
%%Serial data accessing
distance1 = fgetl(s);
distance2= textscan(distance1,'%f %f %f','Delimiter', ',');
distance3(count + 1) = cell2mat(distance2');
area=(0.5*2.094*((distance3(count,1))^2 + (distance3(count,1))^2 + (distance3(count,1))^2));
count = count + 1;
end
%% Clean up the serial port
fclose(s);
delete(s);
clear s;
答案 0 :(得分:1)
嗯,你通常不得不丢弃第一行,因为你不知道什么时候打开串口。
我的意思是,你正在打印
2.0,2.1,3.7\r\n
但是当你刚刚发送了3时你可以打开端口,所以你会收到
.7\r\n
所以只需在fgetl
之后添加fopen
即可正确阅读。
就像注意一样,在流中放置一个起始字符总是一个好习惯,所以你可以在开始时对齐。现在,由于您要发送新行,您可以在其上进行同步