MATLAB在app中扫描串口并在下拉菜单中显示

  • 更新
  • 背景故事
  • 实现串口扫描
  • App中的操作

更新

经评论提醒,R2019已有现成APIhttps://ww2.mathworks.cn/help/matlab/ref/serialportlist.html

背景故事

要在MATLAB的App里面动态识别有什么串口, 放在下拉菜单里让用户选择.

实现串口扫描

这是网上找的代码:
放在同一目录内, 创建一个.m文件:IdentifySerialComs.m.

function devices = IdentifySerialComs()devices = [];Skey = 'HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM';
[~, list] = dos(['REG QUERY ' Skey]);
if ischar(list) && strcmp('ERROR',list(1:5))  %% strcmp 两个字符串相同返回1disp('Error: EnumSerialComs - No SERIALCOMM registry entry')return;
end
list = strread(list,'%s','delimiter',' '); %#ok<FPARK> requires strread()
coms = 0;
for i = 1:numel(list)  %%numel 返回元素个数if strcmp(list{i}(1:3),'COM')if ~iscell(coms)coms = list(i);elsecoms{end+1} = list{i}; %#ok<AGROW> Loop size is always smallendend
end
out = 0;
outK = 0;
for j=1:2switch jcase 1key = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\';case 2key = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\';end[~, vals] = dos(['REG QUERY ' key ' /s /f "FriendlyName" /t "REG_SZ"']);if ischar(vals) && strcmp('ERROR',vals(1:5))disp('Error: EnumSerialComs - No Enumerated USB registry entry')return;endvals = textscan(vals,'%s','delimiter','\t');vals = cat(1,vals{:});for i = 1:numel(vals)if strcmp(vals{i}(1:min(12,end)),'FriendlyName')if ~iscell(out)out = vals(i);elseout{end+1} = vals{i}; %#ok<AGROW> Loop size is always smallendif ~iscell(outK)outK = vals(i-1);elseoutK{end+1} = vals{i-1}; %#ok<AGROW> Loop size is always smallendendend
endi_dev=1;Sservices=[];
for i = 1:numel(coms)match = strfind(out,[coms{i},')']);ind = 0;for j = 1:numel(match)if ~isempty(match{j})ind = j;[~, sers] = dos(['REG QUERY "' outK{ind} '" /f "Service" /t "REG_SZ"']);sers = textscan(sers,'%s','delimiter','\t');sers = cat(1,sers{:});if (numel(sers)>1)sers=strread(sers{2},'%s','delimiter',' ');Sservices{i_dev} = sers{3};i_dev=i_dev+1;endendend
end
Sservices=unique(Sservices);i_dev=1;
for ss=1:numel(Sservices)key = ['HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\' Sservices{ss} '\Enum'];[~, vals] = dos(['REG QUERY ' key ' /f "Count"']);if ischar(vals) && strcmp('ERROR',vals(1:5))%         disp('Error: EnumSerialComs - No Enumerated services USB registry entry')%         returnendvals = textscan(vals,'%s','delimiter','\t');vals = cat(1,vals{:});if (numel(vals)>1)vals=strread(vals{2},'%s','delimiter',' ');Count=hex2dec(vals{3}(3:end));if Count>0[~, vals] = dos(['REG QUERY ' key]);vals = textscan(vals,'%s','delimiter','\t');vals = cat(1,vals{:});out=0;j=0;for i = 1:numel(vals)Enums=strread(vals{i},'%s','delimiter',' ');try nums=hex2dec(Enums{1});catchnums=-1;endif(nums==j)out=['HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\' Enums{3}];[~, listC] = dos(['REG QUERY "' out '" /s /f "PortName" /t "REG_SZ"']);listC = textscan(listC,'%s','delimiter','\t');listC = cat(1,listC{:});if (numel(listC)>1)listC=strread(listC{2},'%s','delimiter',' ');for i = 1:numel(coms)if strcmp(listC{3},coms{i})[~, NameF] = dos(['REG QUERY "' out '" /s /f "FriendlyName" /t "REG_SZ"']);NameF = textscan(NameF,'%s','delimiter','\t');NameF = cat(1,NameF{:});com = str2double(coms{i}(4:end));if com > 9length = 8;elselength = 7;enddevices{i_dev,1} = NameF{2}(27:end-length); %#ok<AGROW>devices{i_dev,2} = com; %#ok<AGROW> Loop size is always smalli_dev=i_dev+1;endendendj=j+1;endendendend
endend

App中的操作

先添加两个私有属性的变量:

properties (Access = private)scan_coms; % 串口列表com_num;   % 串口设备数量
end

在合适的位置插入一个下拉框和按钮, 添加按钮的回调函数, 内容如下.

% Button pushed function: Button
function ButtonPushed(app, event)app.scan_coms = IdentifySerialComs;%app.DropDown.Items = '';app.com_num = size(app.scan_coms);for ii = 1: app.com_num(1)app.DropDown.Items(ii) =  strcat(app.scan_coms(ii, 1),'@COM',  num2str(cell2mat(app.scan_coms(ii, 2)))); endend

这样子就好了, 就实现了点击按钮之后列表中的内容随串口变化.

MATLAB在app中扫描串口并在下拉菜单中显示相关推荐

  1. qt中combox怎么使其下拉菜单的长度变长

    提要 项目开发中一些用户提出下拉菜单的滚动条需要滚好久,才能找到自己想要选择的项,需要将原本值显示10 个的下拉菜单现在加长先使的数目,从而使用户滚动变少. 实现 其实实现就使一个函数,设置combo ...

  2. php 下拉菜单 不提交 选中的值,在html中怎样可以做到下拉菜单提交后保留选中值不返回默认值...

    这次给大家带来在html中怎样可以做到下拉菜单提交后保留选中值不返回默认值,在html中做到下拉菜单提交后保留选中值不返回默认值的注意事项有哪些,下面就是实战案例,一起来看一下. 代码如下: // 获 ...

  3. Bootstrap下拉菜单中禁用某个下拉菜单

    禁用某个下拉菜单 Bootstrap3中,为下拉菜单中某个下拉项的 <li> 元素添加 .disabled 类,就可以禁止该选项,让该菜单项的链接变灰并失去鼠标悬停效果.如: <ul ...

  4. html下拉菜单换背景颜色,如何在select框下拉菜单中更改蓝色突出显示的颜色

    如何在select框下拉菜单中更改蓝色突出显示的颜色 如何更改此下拉菜单中的蓝色突出显示? 链接到select框演示 这是代码: Select an OptionOption 1Option 2 如果 ...

  5. 选下拉框的的值对应上传相应的图片_如何在excel中实现,选择下拉菜单某一项,该表格中就出现选项对应的数据?(excel表格制作选择数据)...

    怎样从多个excel表格中提取数据,做数据分析图呢 1. 数据的.录入.表格的设置,效果如示. 2.如图所示,选进行分析的图据范围 3.如图所示,点击菜单栏目上的"插入",选择&q ...

  6. 选下拉框的的值对应上传相应的图片_excel表格下拉菜单调用对应数据,如何在excel中实现,选择下拉菜单某一项,该表格中就出现选项对应的数据?...

    如何在excel中实现,选择下拉菜单某一项,该表格中就出现选项对应的数据? 选中这几列 打开菜单"数据"-"筛选"-"自动筛选"就是了. 另 ...

  7. 下拉菜单中自动亮度调节P 上背光调节

    P 上背光调节: https://blog.csdn.net/FightFightFight/article/details/85797336 frameworks\base\packages\Sys ...

  8. Excel表格中如何快速生成下拉菜单

    Excel表格中如何快速生成下拉菜单 目录 Excel表格中如何快速生成下拉菜单 1.例如下表先手动输入前几组的"等级"类别"优良中差" ​2.同时按住 alt ...

  9. excel下拉菜单vba_在Excel下拉菜单中显示警告

    excel下拉菜单vba With Excel's data validation, you can show a drop down list of items in a cell. You can ...

最新文章

  1. 系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT
  2. iOS基础网络教程-Swift版本: 1.基础网络概括
  3. lesson5 元组
  4. 关于yarn.nodemanager.vmem-pmem-ratio的通俗解释
  5. python调用c的配置文件_python调用c
  6. 人类究竟有多喜欢看热闹?! | 今日最佳
  7. node.js之文件读写模块,配合递归函数遍历文件夹和其中的文件
  8. 英语作文谈谈你对计算机的看法,英语作文:谈谈你对网络语言的看法
  9. 用html设计一个logo页面_如何设计一个Logo?——Bobu Africa旅行品牌Logo设计
  10. 新车可以无牌上路7天_铜竟然可以做成袜子,连穿7天不臭脚!
  11. 短信验证码接口被恶意攻击怎么办?
  12. 程序员如何变身IT讲师
  13. 40岁计算机研究生能干什么工作,快四十岁了,还能干点什么?
  14. 浅谈估值模型:实现GGM的理想国(附代码)
  15. 对计算机辅助英语教学的建议,CALL引入我国后英语教师面临困难及建议.doc
  16. Mac下Go的安装与配置
  17. 力扣(700.701)补9.9
  18. Windows程序意外挂掉,但显存依然被占用
  19. Express框架简介
  20. MongoDB 分片总结

热门文章

  1. 腾讯云服务器设置可访问ip
  2. 某阅读多word整理自动化脚本
  3. 用pandas处理支付宝交易记录,是否有点杀鸡用牛刀?
  4. 论文学习记录20200605:隐私保护神经网络推理[USENIX2020]
  5. 双拼与五笔同时共用(附五笔词库txt)
  6. 机器学习实战-61:K均值聚类算法(K-Means)
  7. McObject受邀参加“金证股份2014个股期权用户会议”顺利落下帷幕
  8. linux安装文件多大空间,你的Linux系统上安装了多少内存?又使用了多少?
  9. linux 利用win网络共享上网
  10. 数字电路实验(05)二进制计数器设计