打开串口
% 获取所有串口
all_com = serialportlist;
% 选择一个串口
SerialComName = all_com(1)
% 尝试打开串口
try
% 根据所选串口创建对象
Serial_Obj = serialport(SerialComName,115200);
% 使用对象打开串口
fopen(app.Serial_Obj);
% 串口打开成功
SerialComState = 1;
catch
% 串口打开失败
SerialComState = 0;
% 删除串口
delete(app.Serial_Obj);
end
APP Designer的变量导入工作区
% 将appdesigner中的变量Var的值导入到base的工作区,重新命名为VarName
assignin('base','VarName',Var);
Tab的切换
% 做某些操作后面板切换到app.SARTab的页面上
app.TabGroup.SelectedTab = app.SARTab;
全局变量
点击私有属性,代码框中出现
properties (Access = private)
Serial_Obj; % 选定的端口创建的对象
end
然后在函数中通过如下的方式就可以使用或者修改Serial_Obj的值:
% 在别的函数中通过这个对象向串口发送0x01的数据
fwrite(app.Serial_Obj,0x01);
Matlab中的进制
Matlab中,不论写入几进制的数,软件都会将其转化成十进制存起来,好像根本就没有二进制、八进制和十六进制的思维。将正数28和负数-53分别转化成二进制数,会发现转化的结果是一串字符。
a = 25;
b = -53;
a_bin = dec2bin(a);
b_bin = dec2bin(b);
a_bin =
'11001'
b_bin =
'11001011'
如果是正数,会得到一个位数不定但是恰好可以表示该数的二进制字符串,最高位为1;
如果是负数,会得到一个位数为4的整倍数的字符串,最高位为符号位,其余几位为负数的绝对值表示的二进制数取反加一后得到的字符串。
另外,可以规定变换后的二进制字符串的长度,由dec2bin(dec,length)第二个参数length决定。比如:
a_bin = dec2bin(a,8);
可以得到结果:
a_bin =
'00011001'
正数转换成二进制后还可以反变回十进制,如:
a_dec = bin2dec(a_bin);
可以得到:
a_dec =
25
然而,如果十进制数为负数,转换为二进制后,反过来使用bin2dec()函数却得不到原来的十进制的值。
b_rec_non = bin2dec(b_bin);
得到的却是:
b_dec_non =
203
自己撰写代码,解出原值:
% 暂存字符转成的数据再取反
b_dec_vec = zeros(1,8);
for i = 1:8
b_dec_vec(i) = ~str2num(b_bin(i));
end
% 再将向量转化成字符串
new = num2str(b_dec_vec(1));
for i = 2:8
new = [new,num2str(b_dec_vec(i))];
end
% 拿字符串变回十进制
b_dec = -(bin2dec(new)+1);
从负数的反码变回十进制负数的方法就是,
(1)补码取反(变成首0);
(2)转换成对应的正数;
(3)加一再取反。
b_dec =
-53
感受
Matlab不适合做二进制的加法,更适合矩阵运算。