matlab坐标轴显示位置信息

本文介绍了如何在MATLAB中利用虚拟串口进行通信,并通过坐标控件动态显示位置信息。首先,创建虚拟串口并配置MATLAB串口参数,然后生成初始点并绘制。当接收到位置数据时,更新点的颜色以显示位置变化。通过这种方法,即使MATLAB缺少特定控件,也能实现所需功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在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设计上位机的过程中,如果发现没有自己想要的组件,则需要自己想办法实现我们所需要的功能,而不是一味的依靠给的空间,可以实现基本功能即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值