一 基础
标签和信号灯没有回调函数
clc,clear,close all %清理命令区、工作区,关闭显示图形
warning off %消除警告
feature jit off %加速代码运行
ysw{i}=i %循环赋值
celldisp(ysw) %显示元胞数组ysw.y1{1}=[1,2]
disp(ysw) %显示结构体
二 解决办法
1 实时显示数据时用plot画图,添加drawnow后不能立即停止,不添加则停止。数据画图卡顿解决如下:
app.avgHeight.YLim = [0 2.5];
app.Heigh.YLim = [0 2.5];
app.dHeight.YLim = [-1 1];
axis(app.image,'off');
app.i_plot=plot(app.Heigh,NaN); %创建一个plot
app.m_plot=plot(app.avgHeight,NaN);
app.d_plot=plot(app.dHeight,NaN);
line(app.dHeight,1:100, repmat(app.fallThresh,[1,100]),'linestyle','-','color','r');% 瞬时高度
% plot(app.Heigh,app.xAxies ,app.instant); set(app.i_plot,'XData',app.xAxies,'YData',app.instant);% 平均高度
% plot(app.avgHeight,app.xAxies ,app.mH);set(app.m_plot,'XData',app.xAxies,'YData',app.mH);% detal 高度
% plot(app.dHeight,app.xAxies ,app.dH); set(app.d_plot,'XData',app.xAxies,'YData',app.dH);
2 matlab的mod存在0,若作为索引值使用,则会出现错误,解决方法如下:
index = mod(i, 100) + 1;
value(index )=i;
%结束之后翻转数组
circshift(value,-1)%mod后减1的情况%mod后减50的情况
3 数组转成十六进制显示(与串口显示一致),十进制显示
% 十六进制
des = fliplr(des);
%adata = [des dat1(9) dat1(10) dat1(11) dat1(12) dat1(13) dat1(14) dat1(15) dat1(16)];
adata = [des version totalPacketLen numTarget fallDetecteFlage checksum];
str1 = '';
for m=1:length(adata)str1 = [str1,dec2hex(adata(m),2),' ',]; % 2是2位显示
end
string1 = sprintf('%s', str1); % 将数据格式化为字符串或字符向量
string1 = sprintf('%s\n',string1);%十进制
str3 = [des version totalPacketLen numTarget fallDetecteFlage checksum];
str3 = num2str(str3);
string3 = sprintf('%s',str3);
string3 = sprintf('%s\n',string3); %换行% 在文本框滚动显示
app.cellArrayText = horzcat(app.cellArrayText,string1);
app.TextArea.Value = app.cellArrayText;
scroll(app.TextArea,"bottom");%清空数据
app.cellArrayText = [];
app.TextArea.Value = ' ';
4 串口有字节触发回调函数,每次读取的字节数量不同,解析出一个完整的tlv的帧数不是从1开始,这时使用帧数作为后续计算参数,会出现错误结果。python中通过读取一定字节数进行解析,数据不够解析时就读入需要的字节数,从而保证每帧数据都用起来,断电之后的帧数从1开始,使用帧数作为后续计算参数也不会出错。下面1为matlab字节触发的程序,2为python读取字节的程序。
1
2