文章目录
前言
在matlab设计上位机过程中,由于缺少显示位置的控件,我们可以利用坐标控件对位置进行大致的显示,基本可以满足我们所需要的功能
提示:以下是本篇文章正文内容,下面案例可供参考
一、主要思想
利用坐标轴画一些已知点,如果接收到位置信息,可以改变点的颜色或者形状达到位置显示的目的
二、具体步骤
1.虚拟串口
利用虚拟串口发送位置信息,然后使用matlab创建串口进行接收,我们利用虚拟串口软件创建了两个虚拟串口COM1和COM2,所需要发送的数据可以利用串口调试助手COM1发送COM2接收;需要注意的一点是串口调试助手设置参数要和matlab串口参数一致。
2.创建串口
代码如下(示例):
close all;clc;
delete(instrfindall); postion_mat=ones(8,16);
count=1;time=0;
s=serial('COM1');
s.InputBufferSize =512;
s.OutputBufferSize =512;
s.ReadAsyncMode='continuous';
s.BaudRate =115200;
s.Parity ='none';
s.StopBits =1;
s.DataBits =8;
s.Terminator ='CR';
s.FlowControl ='none';
s.timeout =1;
s.BytesAvailableFcnMode = 'byte';
s.BytesAvailableFcnCount = 1024;
s.BytesAvailableFcn = @callback;
try
fopen(s);
catch
disp("error");
end%打开串口
创建串口,并且对于串口的一些参数,例如波特率、停止位等等进行初始化。并且打开串口。
3.产生初始点
代码如下(示例):
%产生128个点
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% for x=1:8
% for y=1:16
% scatter(x,y,'green','filled');
% hold on;
% end
% end%产生128个点
%优化后
data1=1:16;
datax=[];
datay=[];
for x=1:8
data2=x*ones(16,1);
datax=[datax;data2];%生成x坐标
datay=[datay;data1']
end
data=[datax;datay];
scatter(datax,datay,'g','filled');
hold on;
这里需要注意的是可以利用matlab先产生数据的坐标,然后再绘图,并不需要一个点一个点画,会拖慢程序运行速度
4.接收位置数据,并显示
利用串口软件接收到位置数据,并且在相应的点上改变点的颜色和形状,由于每个人定义点坐标并不相同,这里我们所需要显示的并不是一个点,而是很多点的集合。
代码如下(示例):
while(1)
A = fread(s,3,'uint8'); %从串口对象中读取size字节长短的二进制数据,以数组形式存于A
yn=ordinatetransform(A(3));%转换坐标,得到我们想要的坐标值
chip_select=A(1);x=A(2);%y=yn(k);
switch chip_select
case 170
for k=1:length(yn)
y=yn(k);
postion_mat(x,y)=2;
scatter(x,y,'r','filled');
hold on;
drawnow;
end
case 187
for k=1:length(yn)
y=yn(k);
postion_mat(x,y+8)=2;
scatter(x,y+8,'r','filled');
hold on;
drawnow;
end
case 0
for i=1:8
for j=1:16
if postion_mat(i,j)==2
scatter(i,j,'green','filled');
postion_mat(i,j)=1;
hold on;
drawnow;
end
end
end
otherwise
disp('error data');
end
end
function [d]=ordinatetransform(Ordinate)
b=dec2bin(Ordinate,8);%aa=10101010
d=[];j=1;
for i=1:8
if strcmp(b(i),'1')
d(j)=i;
j=j+1;
end
end
end
结果如下所示,发送的我们想要的数据变色,发送000000将置位

总结
在使用APP Designer设计上位机的过程中,如果发现没有自己想要的组件,则需要自己想办法实现我们所需要的功能,而不是一味的依靠给的空间,可以实现基本功能即可。