前言
代码很好理解,核心思路就是每画一段线就hold on,然后画出下一段线。最后数据保存在数组中,保存至xls里面、
一、MATLAB代码
1.代码
代码如下(示例):
instrfind;
fclose(instrfind);
x1=0; %x1x2为第一个数字
x2=0;
y1=0;
y2=0;
x3=0; %x3x4为第二个数字
x4=0;
y3=0;
y4=0;
x5=0; %x5x6为第三个数字
x6=0;
y5=0;
y6=0;
x7=0; %x7x8为第四个数字
x8=0;
y7=0;
y8=0;
x9=0; %x9x10为第五个数字
x10=0;
y9=0;
y10=0;
x11=0; %x11x12为第六个数字
x12=0;
y11=0;
y12=0;
x13=0; %x13x14为第七个数字
x14=0;
y13=0;
y14=0;
firstnum=0;
secondnum=0;
thirdnum=0;
fourthnum=0;
fifthnum=0;
sixthnum=0;
seventhnum=0;
readlength=80;
s=serial('com6') %选择串口号
set(s,'BaudRate',115200,'StopBits',1,'Parity','none');%设置波特率 停止位 校验位
i=1;
fopen(s)
h1=axes('Position',[0.05,0.1,0.8,0.8]);
% h2=axes('Position',[0.5,0.2,0.4,0.6]);
while 1
out=fread(s,readlength,'uint8');%读取 数据个数 与 类型
if(length(out)<readlength) break; end
if(length(out)>=readlength)
for j=1:readlength-7
if(j>=1&&j<=readlength-7)
if(out(j)==65&&out(j+7)==66)%第一个字符串AB 用A和B中间夹着需要传送的数字(int类型)
firstnum=(out(j+2)-48)*10000+(out(j+3)-48)*1000+(out(j+4)-48)*100+(out(j+5)-48)*10+(out(j+6)-48);
if(out(j+1)==49)
firstnum=-1*firstnum;
end
end
if(out(j)==67&&out(j+7)==68)%第二个字符串CD
secondnum=(out(j+2)-48)*10000+(out(j+3)-48)*1000+(out(j+4)-48)*100+(out(j+5)-48)*10+(out(j+6)-48);
if(out(j+1)==49)
secondnum=-1*secondnum;
end
end
if(out(j)==69&&out(j+7)==70)%第三个字符串EF
thirdnum=(out(j+2)-48)*10000+(out(j+3)-48)*1000+(out(j+4)-48)*100+(out(j+5)-48)*10+(out(j+6)-48);
if(out(j+1)==49)
thirdnum=-1*thirdnum;
end
end
if(out(j)==71&&out(j+7)==72)%第四个字符串GH
fourthnum=(out(j+2)-48)*10000+(out(j+3)-48)*1000+(out(j+4)-48)*100+(out(j+5)-48)*10+(out(j+6)-48);
if(out(j+1)==49)
fourthnum=-1*fourthnum;
end
fourthnumal=[fourthnumal,fourthnum];
end
if(out(j)==73&&out(j+7)==74)%第五个字符串IJ
fifthnum=(out(j+2)-48)*10000+(out(j+3)-48)*1000+(out(j+4)-48)*100+(out(j+5)-48)*10+(out(j+6)-48);
if(out(j+1)==49)
fifthnum=-1*fifthnum;
end
end
if(out(j)==75&&out(j+7)==76)%第六个字符串KL
sixthnum=(out(j+2)-48)*10000+(out(j+3)-48)*1000+(out(j+4)-48)*100+(out(j+5)-48)*10+(out(j+6)-48);
if(out(j+1)==49)
sixthnum=-1*sixthnum;
end
end
end
end
x2=i;
y2=firstnum;
x4=i;
y4=secondnum;
x6=i;
y6=thirdnum;
x8=i;
y8=fourthnum;
x10=i;
y10=fifthnum;
x12=i;
y12=sixthnum;
x14=i;
y14=seventhnum;
axes(h1);
line([x1,x2],[y1,y2],'color','r'); %1
hold on;
line([x3,x4],[y3,y4],'color','g'); %2
hold on;
line([x5,x6],[y5,y6],'color','b'); %3
hold on;
line([x7,x8],[y7,y8],'color','cyan'); %4青色
hold on;
line([x9,x10],[y9,y10],'color','magenta'); %5紫色
hold on;
line([x11,x12],[y11,y12],'color','yellow'); %6黄色
hold on;
x1=x2;%1
y1=y2;
x3=x4;%2
y3=y4;
x5=x6;%3
y5=y6;
x7=x8;%4
y7=y8;
x9=x10;%5
y9=y10;
x11=x12;%6
y11=y12;
pause(0.01);%延时一小段时间,必须具备
i=i+1;
end
end
xlswrite('firstnumal.xls', firstnumal);
xlswrite('secondnumal.xls', secondnumal);
xlswrite('thirdnumal.xls', thirdnumal);
xlswrite('fourthnumal.xls', fourthnumal);
xlswrite('fifthnumal.xls', fifthnumal);
xlswrite('sixthnumal.xls', sixthnumal);
fclo
se(s)
instrfind;
fclose(instrfind);
总结
1.中间数据接收规范的原理是AB.CD…中间夹着int类型的数据,做法有一些笨,但准确度比较高,大家见谅。
2.这是之前写的代码,由于开发板没在身边,自己无法完全测试一遍,大家有问题或者不懂得都可以留言。