我正在使用GUIDE制作的客户GUI以及arduino和蓝牙模块。长话短说,我希望能够通过蓝牙读/写SD卡。一切正常!
但是!当从SD卡读回时,matlab读取正确的数据。我可以验证这一点,因为当打印到命令窗口时,它会显示sd卡上的正确数据。
问题在于,当我尝试将此数据设置为指南中的静态文本字符串时,会发生一些有趣的事情。静态文本可以加载文本,但如果我然后添加更多文本到它正在加载的文件并尝试再次读出它仍然只显示旧数据。我知道字符串正在更新,因为正如我所说,当我打印到命令时它会显示正确的数据。
我在使用此项目设置静态文本时遇到了奇怪的问题,任何人都有任何想法让它更容易吗?我遇到的其他问题是在回调函数的开头设置字符串,但文本实际上没有更新,直到回调执行整个函数或抛出错误或诸如此类。
答案 0 :(得分:0)
字符串GUI元素的字符串是否太长,例如,字符串GUI元素只能容纳5行,而您尝试显示6行,然后是7等等?
Matlab不会在静态文本上自动生成滚动条。有关替代方案的讨论,请参阅http://www.mathworks.com/matlabcentral/newsreader/view_thread/148773。我在实时日志显示中所做的(通过同事向我展示这一点)是(假设这是一个循环),TxtMssg
是我的文本“框”,而rec_line
是我从串口读取的行。
try
% Determine NumLines empirically for your font, font size, and static text size
NumLines = 21;
% Get the contents of the static text box, make a cell if necessary
Mssg = get(handles.TxtMssg, 'string');
if iscell(Mssg) == 0
Mssg={Mssg};
end
% Cat on the newly received line
Mssg = [Mssg; rec_line];
% trim to length of textbox, last NumLines rows only
if length(Mssg) > NumLines
Mssg = Mssg((end-NumLines+1):end);
end
% Write Mssg, with a strtrim() in case of any trailing newlines
set(handles.TxtMssg, 'string', strtrim(Mssg));
catch err
% Error handling
end
我建议将try/catch/end
与数据记录类型应用程序一起使用,以防止通信错误导致整个程序崩溃。
答案 1 :(得分:0)
问题没有说明,所以matlab在整个功能完成之前都没有绘制。