基于APP Designer 实现串口数据监测功能App总结(2)——app设计

本文具体介绍app设计的过程,该app接收的数据格式是16位整形数,分byte以字符方式打印。打印U16变量var,打印格式为

printf("%c%c\n",U8(var>>8),U8(var));

app设计如下

1. 选择串口

使用下拉框控件

双击"下拉框",“下拉框”label变为可编辑,修改label为“COM”;同样修改“option 1”为“COM1”

也可以选中控件后,通过右下角的属性修改。这里我们修改一下控件的name “DropDown”,修改为“COM”
这里可以添加多个串口,如“COM2,COM3…… ”,也可以通过读取电脑识别到的串口,赋值给app.COM.Items

  try
	 fclose(instrfind);
  catch          
  end           
  Ports = instrhwinfo('serial');           
  app.COM.Items=flipud(Ports.SerialPorts);%COM1一般为电脑自己的串口,这里把串口数从大到小排列赋值给COM

该段代码我们我们在启动函数startupFcn()中实现在这里插入图片描述
startupFcn函数内可以添加其他初始化操作,当然你也可以把这些初始化封装起来。如下定义 函数COMInitialFun(),并在startupFcn()中调用在这里插入图片描述

2. 选择波特率

操作类似 选择串口同样使用下拉框控件,这里勾选了“允许用户键入文本”,防止可选波特率无法覆盖实际需求在这里插入图片描述

3. 串口状态控制

先在app属性中添加名为“SERIAL”的串口对象
在这里插入图片描述
选用Button控件进行串口状态控制,将控件名改为“SerialSts”和标签修改为“Open”;选用TextArea控件监控串口状态,将控件名改为“SampleSts”
在这里插入图片描述右键Open 控件或者在右下的属性里增加回调函数SerialStsButtonPushed() 在这里插入图片描述回调函数SerialStsButtonPushed(app)

try           
 fclose(instrfind);            
catch            
end                             
if strcmp(app.SerialSts.Text,'Close')              
	 try                
	 	fclose(app.SERIAL);                
	 	app.SerialSts.Text='Open';                
	 	app.SampleSts.Value=[app.SampleSts.Value(2:end);['关闭',app.COM.Value,'成功']];                    
                      
	 catch                 
	 	app.SampleSts.Value=[app.SampleSts.Value(2:end);['关闭',app.COM.Value,'失败']];
	 	app.SerialSts.Text='Close';              
	 end             
 	delete(app.SERIAL);            
else                 
	  try                        
		   app.SERIAL=serial(app.COM.Value,'baudrate',str2num(app.Baud.Value));                    
		   app.SERIAL.BytesAvailableFcnCount = 3;                    
		   set(app.SERIAL,'BytesAvailableFcnMode','byte'); %设置中断触发方式terminator                   
		   set(app.SERIAL,'BytesAvailableFcn',{@app.ReceiveSerial});                       
		   fopen(app.SERIAL);                 %打开串口                      
		   app.SerialSts.Text='Close';     
		   app.SampleSts.Value=[app.SampleSts.Value(2:end);['打开',app.COM.Value,'成功']];                    
	   catch                     
		    app.SampleSts.Value=[app.SampleSts.Value(2:end);['打开',app.COM.Value,'失败']]; 
		    app.SerialSts.Text='Open';                   
		    fclose(app.SERIAL);                    
		    delete(app.SERIAL);                 
	   end                            
  end      

定义串口中断函数ReceiveSerial,其中中断函数需要添加形参src和event
在这里插入图片描述

function ReceiveSerial(app,src,event)
	data = fread(app.SERIAL,3);                                    
	if data(3) == 10      %10——换行符对应的ASICII码                                
		dataPrint = data(1)*256+data(2);                    
		app.SampleSts.Value=[app.SampleSts.Value(2:end);num2str(dataPrint )];                                     
	else                
		app.WaitCount=app.WaitCount+1;                
		app.WaitCount=mod(app.WaitCount,100);                
		app.SampleSts.Value=[app.SampleSts.Value(2:end);['Waiting',num2str(app.WaitCount)]];                
		pause(1);       
	end
end   

这里我们给app.SampleSts.Value进行初始化并在启动函数中调用,定义打印数据的长度,同时新增等待计数变量WaitCount,在初始化函数中初始化,

app.SampleSts.Value={'';'';'';'';'Initial'};
app.WaitCount=0;

在这里插入图片描述
源码在我的上传资源中SerialApp.mlapp

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

modolllee

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

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

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

打赏作者

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

抵扣说明:

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

余额充值