MATLAB2021B APP seriallist 串口通信

news2024/12/18 14:45:11

文章目录

  • 前言
  • 一、项目需要
  • 二、使用步骤
    • 1.查找串口填写到查找列表
    • 2.发送函数
    • 3. 接收函数
    • 4.检测串口按钮
    • 5.选择串口号
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

项目需要:


提示:以下是本篇文章正文内容,下面案例可供参考

一、项目需要

MATLAB 和串口通信为了进一步实现STM32 等单片机通信

二、使用步骤

1.查找串口填写到查找列表

添加初始化函数

在这里插入图片描述

在这里插入图片描述

代码如下(示例):

        % Code that executes after component creation
        function startupFcn(app)
             comlist=serialportlist;
             app.DropDown.Items=comlist;
        end

2.发送函数

点击发送按钮,将数据发送出去, TextArea里面的数据是cell格式,要串口发送要转换成字符数据,这里用了 data=cell2mat(dataToSend);
在这里插入图片描述

代码如下(示例):

        % Button pushed function: Button_5
        function send_serial(app, event)

            dataToSend=app.TextArea.Value;

            
            disp(dataToSend)
%             dataToSend=(uint8)dataTo;

                data=cell2mat(dataToSend);

%             fprintf('com3  %s \n',dataToSend); 

             write(app.Serial_Obj, data,"uint8"); 
        end

3. 接收函数

新建接收函数
输入名称,点击+公共函数

在这里插入图片描述

自动生成代码,修改函数名后,添加函数输入参数

参考代码

  methods (Access = public)
        
        function results = recive(app,src,envent)
            receivedData = read(app.Serial_Obj, 5, 'char');
            app.TextArea_2.Value=receivedData;                
            receivedDataStr = char(receivedData);                
            % 显示接收到的数据  
            disp('Received Data:');  
            disp(receivedDataStr);         
        end

在这里插入图片描述

4.检测串口按钮

% Button pushed function: Button_3
function check_serial(app, event)
    
  %  global ports

    app.ports = serialportlist;  
  
    % 检查是否有可用的串口  
    if isempty(app.ports)  
        disp('没有检测到任何串口设备。');  
    else  
        % 显示串口信息  
        for i = 1:length(app.ports)  
            fprintf('Port %d: %s\n', i, app.ports(i));  
        end  
    end
    
    % 假设 handles.popupmenu1 是已经创建的 popupmenu 控件  
    % 创建一个包含多个字符串的单元格数组  
    %  options = {'Oon 1', 'Option 2', 'Option 3'};  
      
    % 将这个单元格数组设置为 popupmenu 的 'String' 属性 
    app.DropDown.Items=app.ports;

end

5.选择串口号

在这里插入图片描述

        function chose_com_v(app, event)
            value = app.DropDown.Value;
%             fprintf('com %s  \n',value); 

             switch value
                case 'COM1'
                       fprintf('    com1 \n'); 
                case 'COM2'
                        fprintf('com2  \n'); 
                case 'COM3'

                    fprintf('com3  \n'); 
            end
            
        end

在这里插入图片描述

完整程序

classdef app1 < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        UIFigure       matlab.ui.Figure
        TextArea_2     matlab.ui.control.TextArea
        Label_2        matlab.ui.control.Label
        Button_5       matlab.ui.control.Button
        TextArea       matlab.ui.control.TextArea
        Label          matlab.ui.control.Label
        Button_4       matlab.ui.control.Button
        Button_3       matlab.ui.control.Button
        DropDown       matlab.ui.control.DropDown
        DropDownLabel  matlab.ui.control.Label
        Button_2       matlab.ui.control.Button
        Image2         matlab.ui.control.Image
        Image          matlab.ui.control.Image
        Button         matlab.ui.control.Button
    end

    
    properties (Access = public)
%         Property % Description
            image1
             ports
             Serial_Obj

    end
    

    % Callbacks that handle component events
    methods (Access = private)

        % Button pushed function: Button
        function open_image(app, event)
            app.image1=imread('img6_1.jpg');
%             imshow(image1);

%              i=imread('1.jpg');
            app.Image.ImageSource=app.image1;
        end

        % Button pushed function: Button_2
        function open_image2(app, event)
            app.Image2.ImageSource=app.image1;
        end

        % Button pushed function: Button_3
        function check_serial(app, event)
            
          %  global ports

app.ports = serialportlist;  
  
% 检查是否有可用的串口  
if isempty(app.ports)  
    disp('没有检测到任何串口设备。');  
else  
    % 显示串口信息  
    for i = 1:length(app.ports)  
        fprintf('Port %d: %s\n', i, app.ports(i));  
    end  
end

% 假设 handles.popupmenu1 是已经创建的 popupmenu 控件  
% 创建一个包含多个字符串的单元格数组  
%  options = {'Oon 1', 'Option 2', 'Option 3'};  
  
% 将这个单元格数组设置为 popupmenu 的 'String' 属性 
app.DropDown.Items=app.ports;

        end

        % Drop down opening function: DropDown
        function chose_com(app, event)
            
%             value = app.DropDown.Value;


%             x=0:0.01:5;
%             y=sin(x);
%             switch value
%                 case '红色'
%                     plot(app.UIAxes,x,y,'r')
%                 case '绿色'
%                     plot(app.UIAxes,x,y,'g')
%                 case '黄色'
%                     plot(app.UIAxes,x,y,'y')
%             end

        end

        % Value changed function: DropDown
        function chose_com_v(app, event)
            value = app.DropDown.Value;
%             fprintf('com %s  \n',value); 

             switch value
                case 'COM1'
                       fprintf('    com1 \n'); 
                case 'COM2'
                        fprintf('com2  \n'); 
                case 'COM3'

                    fprintf('com3  \n'); 
            end
            
        end

        % Button pushed function: Button_4
        function open_seiral(app, event)
   

                % 获取所有可用的串口端口号  
%                 portNames = {app.ports(var)}; % 这是一个单元数组  
                portNames=app.DropDown.Value;
                  
                % 将单元数组转换为字符串数组(如果需要)  
                portNamesStr = string(portNames); % 在 MATLAB R2016b 及更高版本中可用  
                  
                % 显示端口号  
                disp(portNamesStr);
                
                
                % 创建并打开串口  
                
                serialComName = portNamesStr;
                serialBaudrate = 9600;
                serialDataBit = 8;
                serialCheckBit = 'none';
                serialStopBit = 1;
                 
                % 尝试打开串口
                try
                    app.Serial_Obj=serialport(serialComName,serialBaudrate,"Parity",serialCheckBit,"DataBits",serialDataBit,"StopBits",serialStopBit,"Timeout",1);
                    text1 = '串口打开成功';
                    disp(text1)
                    dataToSend = 'Hello, Serial Port!';  
                    write(app.Serial_Obj, dataToSend, "uint8"); 

                 
                catch
                    % 串口打开失败
                    text = '串口打开失败';
                    disp(text)
                    % 删除串口
                    delete(app.Serial_Obj);
                end

        end

        % Button pushed function: Button_5
        function send_serial(app, event)

            dataToSend=app.TextArea.Value;

            
            disp(dataToSend)
%             dataToSend=(uint8)dataTo;

                data=cell2mat(dataToSend);

%             fprintf('com3  %s \n',dataToSend); 

             write(app.Serial_Obj, data,"uint8"); 
        end
    end

    % Component initialization
    methods (Access = private)

        % Create UIFigure and components
        function createComponents(app)

            % Create UIFigure and hide until all components are created
            app.UIFigure = uifigure('Visible', 'off');
            app.UIFigure.Position = [100 100 737 525];
            app.UIFigure.Name = 'MATLAB App';

            % Create Button
            app.Button = uibutton(app.UIFigure, 'push');
            app.Button.ButtonPushedFcn = createCallbackFcn(app, @open_image, true);
            app.Button.Position = [98 409 100 24];
            app.Button.Text = {'打开图像'; ''};

            % Create Image
            app.Image = uiimage(app.UIFigure);
            app.Image.Position = [524 275 200 251];

            % Create Image2
            app.Image2 = uiimage(app.UIFigure);
            app.Image2.Position = [525 97 210 200];

            % Create Button_2
            app.Button_2 = uibutton(app.UIFigure, 'push');
            app.Button_2.ButtonPushedFcn = createCallbackFcn(app, @open_image2, true);
            app.Button_2.Position = [99 354 100 24];
            app.Button_2.Text = '打开图像2';

            % Create DropDownLabel
            app.DropDownLabel = uilabel(app.UIFigure);
            app.DropDownLabel.HorizontalAlignment = 'right';
            app.DropDownLabel.Position = [71 275 66 22];
            app.DropDownLabel.Text = 'Drop Down';

            % Create DropDown
            app.DropDown = uidropdown(app.UIFigure);
            app.DropDown.DropDownOpeningFcn = createCallbackFcn(app, @chose_com, true);
            app.DropDown.ValueChangedFcn = createCallbackFcn(app, @chose_com_v, true);
            app.DropDown.Position = [152 275 100 22];

            % Create Button_3
            app.Button_3 = uibutton(app.UIFigure, 'push');
            app.Button_3.ButtonPushedFcn = createCallbackFcn(app, @check_serial, true);
            app.Button_3.Position = [99 191 100 24];
            app.Button_3.Text = '查找串口';

            % Create Button_4
            app.Button_4 = uibutton(app.UIFigure, 'push');
            app.Button_4.ButtonPushedFcn = createCallbackFcn(app, @open_seiral, true);
            app.Button_4.Position = [99 120 100 24];
            app.Button_4.Text = '打开串口';

            % Create Label
            app.Label = uilabel(app.UIFigure);
            app.Label.HorizontalAlignment = 'right';
            app.Label.Position = [278 390 29 22];
            app.Label.Text = '发送';

            % Create TextArea
            app.TextArea = uitextarea(app.UIFigure);
            app.TextArea.Position = [322 354 150 60];

            % Create Button_5
            app.Button_5 = uibutton(app.UIFigure, 'push');
            app.Button_5.ButtonPushedFcn = createCallbackFcn(app, @send_serial, true);
            app.Button_5.Position = [100 49 100 24];
            app.Button_5.Text = '发送';

            % Create Label_2
            app.Label_2 = uilabel(app.UIFigure);
            app.Label_2.HorizontalAlignment = 'right';
            app.Label_2.Position = [279 301 29 22];
            app.Label_2.Text = '接收';

            % Create TextArea_2
            app.TextArea_2 = uitextarea(app.UIFigure);
            app.TextArea_2.Position = [324 269 150 60];

            % Show the figure after all components are created
            app.UIFigure.Visible = 'on';
        end
    end

    % App creation and deletion
    methods (Access = public)

        % Construct app
        function app = app1

            % Create UIFigure and components
            createComponents(app)

            % Register the app with App Designer
            registerApp(app, app.UIFigure)

            if nargout == 0
                clear app
            end
        end

        % Code that executes before app deletion
        function delete(app)

            % Delete UIFigure when app is deleted
            delete(app.UIFigure)
        end
    end
end

总结

学习使人快乐!
音乐使人愉悦!
日积月累使人充实和自信!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenShift 4 - 多云管理(2) - 配置多集群观察功能

《OpenShift / RHEL / DevSecOps 汇总目录》 本文在 OpenShift 4.17 RHACM 2.12 环境中进行验证。 文章目录 多集群观察技术架构安装多集群观察功能监控多集群的运行状态监控多集群的应用运行在被管集群监控应用运行在管理集群监控被管集群的应用运行 参考 多集群观察技术架构…

AMBA-CHI协议详解(十二)

AMBA-CHI协议详解&#xff08;一&#xff09;- Introduction AMBA-CHI协议详解&#xff08;二&#xff09;- Channel fields / Read transactions AMBA-CHI协议详解&#xff08;三&#xff09;- Write transactions AMBA-CHI协议详解&#xff08;四&#xff09;- Other transac…

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

一、RAGFlow简介 RAGFlow是一个基于对文档深入理解的开源RAG&#xff08;Retrieval-augmented Generation&#xff0c;检索增强生成&#xff09;引擎。 主要作用&#xff1a; 让用户创建自有知识库&#xff0c;根据设定的参数对知识库中的文件进行切块处理&#xff0c;用户向大…

Android中坐标体系知识超详细讲解

说来说去都不如画图示意简单易懂啊&#xff01;&#xff01;&#xff01;真是的&#xff01; 来吧先上张图&#xff01; &#xff08;一&#xff09;首先明确一下android 中的坐标系统&#xff1a; 屏幕的左上角是坐标系统原点&#xff08;0,0&#xff09; 原点向右延伸是X轴正…

IO的进阶

目录 1. 字符流转向字节流的桥梁1.1 OutputStreamWriter1.2 InputStreamReader1.3 编码与解码1.4 常见编码方式1.5 编码与解码的注意事项 2.Properties2.1概述2.2 Properties 的常用方法2.3 Properties 的应用场景2.4 实例 3.序列化3.1 ObjectOutputStream 4.字符编码4.1 ASCII…

【计算机网络】期末考试预习复习|中

作业讲解 转发器、网桥、路由器和网关(4-6) 作为中间设备&#xff0c;转发器、网桥、路由器和网关有何区别&#xff1f; (1) 物理层使用的中间设备叫做转发器(repeater)。 (2) 数据链路层使用的中间设备叫做网桥或桥接器(bridge)。 (3) 网络层使用的中间设备叫做路…

Edge Scdn用起来怎么样?

Edge Scdn&#xff1a;提升网站安全与性能的最佳选择 在当今互联网高速发展的时代&#xff0c;各种网络攻击层出不穷&#xff0c;特别是针对网站的DDoS攻击威胁&#xff0c;几乎每个行业都可能成为目标。为了确保网站的安全性与稳定性&#xff0c;越来越多的企业开始关注Edge …

UE4_控件蓝图_制作3D生命血条

一&#xff1a;效果图如下&#xff1a; 二、实现步骤&#xff1a; 1、新建敌人 右键蓝图类 选择角色&#xff0c; 重命名为BP_Enemytest。 双击打开&#xff0c;配置敌人网格体 修改位置及朝向 效果如下&#xff1a; 选择合适的动画蓝图类&#xff1a; 人物就有了动作&#x…

厦门凯酷全科技有限公司引领电商营销新风尚

在当今数字化经济快速发展的背景下&#xff0c;抖音作为领先的短视频和直播平台&#xff0c;已成为品牌推广和产品销售的重要渠道。厦门凯酷全科技有限公司&#xff08;以下简称“凯酷全”&#xff09;凭借其专业的团队和丰富的经验&#xff0c;专注于为客户提供高质量的抖音电…

高扬程潜水泵:大流量与高效率的完美结合|深圳鼎跃

洪水是由暴雨、风暴潮等等自然因素引起的江河湖海水量迅速增加或水位迅猛上涨的水流现象。一旦发生洪水事件&#xff0c;会侵袭河道沿岸的城市、农田等场景&#xff0c;在低洼地区容易形成积水&#xff0c;不仅影响人们的生活&#xff0c;还存在一定的安全风险。 高扬程潜水泵是…

神经网络基础-神经网络搭建和参数计算

文章目录 1.构建神经网络2. 神经网络的优缺点 1.构建神经网络 在 pytorch 中定义深度神经网络其实就是层堆叠的过程&#xff0c;继承自nn.Module&#xff0c;实现两个方法&#xff1a; __init__方法中定义网络中的层结构&#xff0c;主要是全连接层&#xff0c;并进行初始化。…

web网页前后端交互方式

参考该文&#xff0c; 一、前端通过表单<form>向后端发送数据 前端是通过html中的<form>表单&#xff0c;设置method属性定义发送表单数据的方式是get还是post。 如使用get方式&#xff0c;则提交的数据会在url中显示&#xff1b;如使用post方式&#xff0c;提交…

Mac配置 Node镜像源的时候报错解决办法

在Mac电脑中配置国内镜像源的时候报错,提示权限问题,无法写入配置文件。本文提供解决方法,青测有效。 一、原因分析 遇到的错误是由于 .npm 目录下的文件被 root 用户所拥有,导致当前用户无法写入相关配置文件。 二、解决办法 在终端输入以下命令,输入管理员密码即可。 su…

Linux实操篇-远程登录/Vim/开机重启

目录 传送门前言一、远程登录1、概念2、ifconfig3、实战3.1、SSH&#xff08;Secure Shell&#xff09;3.2、VNC&#xff08;Virtual Network Computing&#xff09;3.3、RDP&#xff08;Remote Desktop Protocol&#xff09;3.4、Telnet&#xff08;不推荐&#xff09;3.5、FT…

【C/C++进阶】CMake学习笔记

本篇文章包含的内容 一、CMake简介二、使用CMake构建工程2.1 一个最简单的CMake脚本2.2 使用变量和宏2.3 文件搜索 三、使用CMake制作和使用库文件3.1 静态库和动态库3.2 字符串操作3.3 CMake制作库文件3.4 CMake使用库文件3.4.1 使用link_libraries链接3.4.2 使用target_link_…

JS 生成防篡改水印

网页中有水印的需求&#xff0c;今天我们实现手写一个防篡改水印&#xff0c;先看下效果图&#xff1a; 一、创建class函数 传递一个dom为水印包裹器&#xff0c;有一些监听防篡改的observer&#xff0c;然后实例化的时候创建水印&#xff0c;执行create()方法 class WaterMa…

概率论得学习和整理26:EXCEL 关于plot 折线图--频度折线图的一些细节

目录 0 折线图有很多 1 频度折线图 1.1 直接用原始数据做的频度折线图 2 将原始数据生成数据透视表 3 这样可以做出了&#xff0c;频度plot 4 做按某字段汇总&#xff0c;成为累计plot分布 5 修改上面显示效果&#xff0c;做成百分比累计plot频度分布 0 折线图有很多 这…

实现echart大屏动画效果及全屏布局错乱解决方式

如何实现echarts动画效果?如何实现表格或多个垂直布局的柱状图自动滚动效果?如何解决tooltip位置超出屏幕问题,如何解决legend文字过长,布局错乱问题?如何处理饼图的中心图片永远居中? 本文将主要解决以上问题,如有错漏,请指正. 一、大屏动画效果 这里的动画效果主要指&…

pytest入门九:feature

fixture是pytest特有的功能&#xff0c;用以在测试执行前和执行后进行必要的准备和清理工作。使用pytest.fixture标识&#xff0c;定义在函数前面。在你编写测试函数的时候&#xff0c;你可以将此函数名称做为传入参数&#xff0c;pytest将会以依赖注入方式&#xff0c;将该函数…

C# 中的闭包

文章目录 前言一、闭包的基本概念二、匿名函数中的闭包1、定义和使用匿名函数2、匿名函数捕获外部变量3、闭包的生命周期 三、Lambda 表达式中的闭包1、定义和使用 Lambda 表达式2、Lambda 表达式捕获外部变量3、闭包的作用域 四、闭包的应用场景1、事件处理2、异步编程3、迭代…