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
Tags:
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por