em 05-29-2013 08:31 AM
Bom dia. Eu estou montando um programa para obter e mostrar os dados de uma estação meteorológica. Todos os mostradores estão agrupados em um cluster e o programa varre um array de dados buscando as informações de interesse através de uma estrutura case dentrou de uma estrutura while. O problema é que não consigo jogar essas informações para os mostradores do cluster. Pelo highlight execution posso ver que as leituras estão sendo feitas corretamente. Mas, cada vez que o while faz uma iteração as variáveis já lidas retornam ao valor 0. Segue em anexo o programa e abaixo um exemplo de dado de entrada:
91FF FF06 0030 0266 164A C500 0006 C7FF FF00 0072 0100 0020 0091 FFFF 0000 7201 0000 2000 91FF FF0E 020E FFFF 0600 3102 6616 4AC5 0000 06C8 FFFF 0000 7201 0000 2000 91FF FF00 0072 0100 0020 0091 FFFF 0000 7201 0000 2000 91FF FF06 00
em 05-29-2013 01:32 PM
Executei seu programa e obtive o mesmo resultado. Quando fui analisar o código tive dificuldade de analisá-lo, pois o mesmo não cabe na minha tela. Percebi que você precisa melhorar um pouco a forma de programar, tornando o diagrama de blocos mais compacto. Uma forma de tornar o código mais legível é utilizar subrotinas. Quem sabe numa boa faxina você acaba encontrando o problema?
em 07-08-2013 02:02 PM
Olá,
Realmente, seu código necessita de um retrofit e avaliação da lógica dos cases. Com essa mensagem exemplo que você enviou, há 10 iterações no while. No final da primeira já ha valores no cluster: Temperatura EXBTH,Temperatura Orvalho EXBTH, Umidade EXBTH, Pressão (23, 16, 66, 600 respectivamente). No final do 8 loop, os valores são zerados. Dessa forma, está sempre alimentando o cluster final com zeros. Espero ter contribuído.
[ ]s
EFB
em 07-15-2013 03:49 PM
Heitor,
Nosso colega acima tem toda a razão. Não consegui entender exatamente a sua lógica, no entanto por meio da análise do código e com a ajuda das ferramentas de depuração, percebi que realmente a cada iteração do loop while ocorre a escrita de valores no shift register, mas especificamente na última iteração os valores escritos no shift register do loop while é igual a zero para todos os componentes do cluster. Como o seu cluster está fora do loop, esse último valor será o único escrito no cluster.
Pelo o que eu percebi, isso está ocorrendo porque os últimos valores indexados nos for loops estão em índices que não estão inicializados.
Aconselho que você reveja a sua lógica.
Qualquer dúvida estamos à disposição.
Cordialmente,
em 09-11-2013 08:33 PM
Talvez vc ja tenha resolvido o problema, mas aqui vai meu conselho:
Vc pode criar um case adicional com nenhum codigo dentro dele e fazer ele o case default. Alem disso, vc precis colocar o indicador de cluster DENTRO do loop while pra ele ir atualizando durante a execucao do loop. Do jeito que o programa esta agora, o programa vai terminar a execucao do loop para entao atualizar os valores do cluster.