Texto estático não mostrando a string inteira quando carregado com set(handles.text3, 'String', myString)
-
21-12-2019 - |
Pergunta
Estou usando uma GUI do cliente feita com GUIDE em conjunto com um arduino e um módulo bluetooth.Resumindo, quero poder ler/escrever via bluetooth em um cartão SD.Tudo isso funciona bem!
Mas!Ao ler o cartão SD, o matlab lê os dados corretos.Posso verificar isso porque ao imprimir na janela de comando mostra os dados corretos que estavam no cartão SD.
O problema é que quando tento definir esses dados para a string de um texto estático no guia, algumas coisas engraçadas acontecem.O texto estático pode ser carregado com texto, mas se eu adicionar mais texto ao arquivo de onde ele está sendo carregado e tentar lê-lo novamente, ele ainda exibirá apenas os dados antigos.Eu sei que a string está sendo atualizada porque como eu disse quando imprimo no comando ela mostra os dados corretos.
Tive problemas estranhos com a configuração de texto estático neste projeto. Alguém tem alguma ideia para tornar isso mais fácil?Outros problemas que tive foram definir a string no início de uma função de retorno de chamada, mas o texto não foi realmente atualizado até que o retorno de chamada executasse toda a função ou gerasse um erro ou algo assim.
Solução 2
Problema não foi desenhado para que o Matlab não puxasse até que toda a função terminasse.
Outras dicas
A string é muito longa para o elemento GUI de string, por exemplo, o elemento GUI de string pode conter apenas 5 linhas e você está tentando exibir 6, depois 7, etc.?
Matlab não produz automaticamente barras de rolagem em texto estático.Ver http://www.mathworks.com/matlabcentral/newsreader/view_thread/148773 para uma discussão de alternativas.O que eu faço (cortesia de um colega de trabalho que me mostrou isso) em exibições de log em tempo real é (assumindo que isso esteja em loop) isso, com TxtMssg
sendo minha "caixa" de texto e rec_line
sendo a linha que li na porta serial.
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
Eu recomendo usar try/catch/end
com aplicativos do tipo datalogging para evitar que uma falha na comunicação trave todo o programa.