简易的MATLAB上位机--接收串口数据

前言

代码很好理解,核心思路就是每画一段线就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.这是之前写的代码,由于开发板没在身边,自己无法完全测试一遍,大家有问题或者不懂得都可以留言。

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@白圭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值