MATLAB在app中扫描串口并在下拉菜单中显示
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中扫描串口并在下拉菜单中显示相关推荐
- qt中combox怎么使其下拉菜单的长度变长
提要 项目开发中一些用户提出下拉菜单的滚动条需要滚好久,才能找到自己想要选择的项,需要将原本值显示10 个的下拉菜单现在加长先使的数目,从而使用户滚动变少. 实现 其实实现就使一个函数,设置combo ...
- php 下拉菜单 不提交 选中的值,在html中怎样可以做到下拉菜单提交后保留选中值不返回默认值...
这次给大家带来在html中怎样可以做到下拉菜单提交后保留选中值不返回默认值,在html中做到下拉菜单提交后保留选中值不返回默认值的注意事项有哪些,下面就是实战案例,一起来看一下. 代码如下: // 获 ...
- Bootstrap下拉菜单中禁用某个下拉菜单
禁用某个下拉菜单 Bootstrap3中,为下拉菜单中某个下拉项的 <li> 元素添加 .disabled 类,就可以禁止该选项,让该菜单项的链接变灰并失去鼠标悬停效果.如: <ul ...
- html下拉菜单换背景颜色,如何在select框下拉菜单中更改蓝色突出显示的颜色
如何在select框下拉菜单中更改蓝色突出显示的颜色 如何更改此下拉菜单中的蓝色突出显示? 链接到select框演示 这是代码: Select an OptionOption 1Option 2 如果 ...
- 选下拉框的的值对应上传相应的图片_如何在excel中实现,选择下拉菜单某一项,该表格中就出现选项对应的数据?(excel表格制作选择数据)...
怎样从多个excel表格中提取数据,做数据分析图呢 1. 数据的.录入.表格的设置,效果如示. 2.如图所示,选进行分析的图据范围 3.如图所示,点击菜单栏目上的"插入",选择&q ...
- 选下拉框的的值对应上传相应的图片_excel表格下拉菜单调用对应数据,如何在excel中实现,选择下拉菜单某一项,该表格中就出现选项对应的数据?...
如何在excel中实现,选择下拉菜单某一项,该表格中就出现选项对应的数据? 选中这几列 打开菜单"数据"-"筛选"-"自动筛选"就是了. 另 ...
- 下拉菜单中自动亮度调节P 上背光调节
P 上背光调节: https://blog.csdn.net/FightFightFight/article/details/85797336 frameworks\base\packages\Sys ...
- Excel表格中如何快速生成下拉菜单
Excel表格中如何快速生成下拉菜单 目录 Excel表格中如何快速生成下拉菜单 1.例如下表先手动输入前几组的"等级"类别"优良中差" 2.同时按住 alt ...
- excel下拉菜单vba_在Excel下拉菜单中显示警告
excel下拉菜单vba With Excel's data validation, you can show a drop down list of items in a cell. You can ...
最新文章
- 系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT
- iOS基础网络教程-Swift版本: 1.基础网络概括
- lesson5 元组
- 关于yarn.nodemanager.vmem-pmem-ratio的通俗解释
- python调用c的配置文件_python调用c
- 人类究竟有多喜欢看热闹?! | 今日最佳
- node.js之文件读写模块,配合递归函数遍历文件夹和其中的文件
- 英语作文谈谈你对计算机的看法,英语作文:谈谈你对网络语言的看法
- 用html设计一个logo页面_如何设计一个Logo?——Bobu Africa旅行品牌Logo设计
- 新车可以无牌上路7天_铜竟然可以做成袜子,连穿7天不臭脚!
- 短信验证码接口被恶意攻击怎么办?
- 程序员如何变身IT讲师
- 40岁计算机研究生能干什么工作,快四十岁了,还能干点什么?
- 浅谈估值模型:实现GGM的理想国(附代码)
- 对计算机辅助英语教学的建议,CALL引入我国后英语教师面临困难及建议.doc
- Mac下Go的安装与配置
- 力扣(700.701)补9.9
- Windows程序意外挂掉,但显存依然被占用
- Express框架简介
- MongoDB 分片总结
热门文章
- 腾讯云服务器设置可访问ip
- 某阅读多word整理自动化脚本
- 用pandas处理支付宝交易记录,是否有点杀鸡用牛刀?
- 论文学习记录20200605:隐私保护神经网络推理[USENIX2020]
- 双拼与五笔同时共用(附五笔词库txt)
- 机器学习实战-61:K均值聚类算法(K-Means)
- McObject受邀参加“金证股份2014个股期权用户会议”顺利落下帷幕
- linux安装文件多大空间,你的Linux系统上安装了多少内存?又使用了多少?
- linux 利用win网络共享上网
- 数字电路实验(05)二进制计数器设计