Oi pessoal,

Estou fazendo um programa de teste aqui onde eu tenho um programa em delphi pra ler os dados que chegam da porta COM. Meu arduino fica conectado no computador e quero que os dados que ele envia sejam recebidos pelo programa.

Meu problema é o seguinte, se eu mando os dados usando o Serial.print ou println, o programa recebe os dados certinho, agora se eu usar o Serial.write pra mandar bytes mesmo e não caracteres, aí recebo uns valores que não tem nada a ver com os dados enviados.

Alguém sabe o que pode ser isso? Preciso configurar alguma coisa pra usar o Serial.write?

Obrigado

Francesco

Exibições: 345

Responder esta

Respostas a este tópico

Tente usar um programa de terminal onde vc possa visualizar o que ele mandou de forma numerica.
Ex:
"Terminal by Br@y ++"
https://www.google.com.br/#q=Terminal+by+Br%40y+%2B%2B+serial+download
Provavelmente ele está decompondo o valor em 2 bytes (LSB e HSB) ou coisa assim.

Converta os bytes lidos para hexadecimal, para entender o que passa.

Qual é tipo de dado enviado?  int, long, char ?

Você provavelmente terá que remontar os bytes para o tipo enviado.

http://labdegaragem.com/forum/topics/projeto-alarme-sem-fio-arduino...

Bom, não sei direito como, mas finalmente consegui resolver o problema.

Eu estava usando o mesmo programa que uso pra ler dados do outro microcontrolador que eu tenho aqui, o Wixel. Mas o programa é a única coisa igual, todo o resto é diferente. Antes eu estava trabalhando no windows xp, agora estou com o windows 7, antes era wixel, agora é arduino.

Eu baixei o programa terminal sugerido pelo Eduardo, mas demorei pra conseguir usar pq o programa ele só lê portas até a COM7 e eu já tava na COM12. Apanhei bastante pra descobrir como mudar a porta do arduino pra ficar dentro das 7 que o terminal aceita, mas finalmente consegui.

E aí vi que o terminal estava recebendo os dados corretos, seja como string (com o Serial.print) ou como binário (com o Serial.write).

Depois de muito apanhar acabei descobrindo que aquele comportamento que eu tinha detectado antes era só aparente, mas o problema era outro. A questão é que se eu ligasse o computador e já executasse o programa, os dados vinham bagunçados. Agora se antes de ligar o programa eu ativasse o terminal ou usasse o terminal do arduino e depois ligasse meu programa, aí os dados chegavam corretos. Portanto cheguei a conclusão que o problema era na abertura da porta. Alguma inicialização que eu não estava fazendo e que na situação anterior (windos xp+wixel) não era necessária mas agora é.

Então pra ver o que realmente estava acontecendo, loguei todos os parâmetros da porta, usando primeiro só o meu programa e depois de usar o terminal. E percebi que a inicialização que estava fazendo não estava realmente inicializando nada. O programa só funcionava se a porta já estivesse inicializada por outro programa. Tudo que o programa conseguia fazer era abrir e fechar a porta, mas não conseguia alterar nenhum de seus parâmetros.

A solução que eu cheguei e que resolveu o problema foi mudar a maneira de configurar a porta, antes eu estava fazendo do jeito simples, usando uma string para inicializar os parâmetros da porta e chamando a função buildCommDCB() da API pra configurar o registro DCB. Agora o registro é preenchido "na unha", atribuindo os valores individualmente pra cada campo.

Não sei exatamente por que, mas funcionou, então o problema foi resolvido. Quero aproveitar pra agradecer ao Eduardo e ao Gustavo pela ajuda.

Abraços

Francesco

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço