Texto estático não mostrando a string inteira quando carregado com set(handles.text3, 'String', myString)

StackOverflow https://stackoverflow.com//questions/21010172

  •  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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top