Matlab正在从arduino串行输出中读取额外的字符

时间:2016-02-08 18:39:14

标签: matlab arduino

我让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;

1 个答案:

答案 0 :(得分:1)

嗯,你通常不得不丢弃第一行,因为你不知道什么时候打开串口。

我的意思是,你正在打印

2.0,2.1,3.7\r\n

但是当你刚刚发送了3时你可以打开端口,所以你会收到

.7\r\n

所以只需在fgetl之后添加fopen即可正确阅读。

就像注意一样,在流中放置一个起始字符总是一个好习惯,所以你可以在开始时对齐。现在,由于您要发送新行,您可以在其上进行同步