FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
ComPort RxChar, Delphi vs Arduino (byte de lectura)
Buenas noches,
estoy programando un modulo MPU6050 para calcular los ángulos de giro en e pilotaje de una avión RC, Ya tengo el código generado en Arduino y me devuelve correctamente en el monitor serie, respecto a Delphi, estoy intentando leer los valores a través de las librerías comport y imprimir en un memo, el problema es que no recibo correctamente la cadena de texto, se come caracteres. he estado indagando y debe tener alguna relacion con la velocidad de lectura de los bytes, al aumentar los BaudRate, parece que mejora, pero aun poniéndolos al máximo, sigue generando problemas. he intentado también ponerle un sleep(70) después de la impresión en el memo, para darle tiempo a leer la cadena entera al buffer, pero sigue sin ser la solución definitiva., alguna sugerencia? Codigo arduino: Cita:
X:32.60/Y:-6.03 X:32.75/Y:-6.18 X:32.63/Y:-6.15 X:32.81/Y:-5.93 Codigo Delphi: Cita:
X:32 .88/Y:-6.01 X:3 2.76/Y:-5.85 X :32.80/Y:-6.14 X:32 .69/Y:-6.28 X: 32.89/Y:-5.91 Agradecido x la ayuda! |
#2
|
||||
|
||||
En estos casos siempre recomiendo realizar la lectura primero con el HyperTerminal de windows.
De esta manera descartas problemas con librerías y te permite realizar diferentes configuraciones del puerto (velocidad,...). Una vez que con el HyperTerminal leas los valores de forma correcta, puedes pasar a Delphi. Si buscas en los foros encontrarás hilos que hablan de cómo trabajar con HT y cómo configurarlo, si no lo has hecho nunca.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 06-08-2021 a las 10:00:36. |
#3
|
|||
|
|||
Cita:
Muchas Gracias por tu respuesta Neftali, he probado la lectura desde la HyperTerminal y lee y imprime correctamente los datos, igual que desde el terminal de arduino. Definitivamente y por la forma de imprimir en el Memo de Delphi, deduzco que la lectura de delphi corre más rápida que el envío desde el comport, por eso imprime las string a trozos. sinceramente me encuentro algo bloqueado, alguna sugerencia? |
#4
|
||||
|
||||
Una vez que sabes que desde HyperTerminal la lectura es correcta y por lo tanto tienes los parámetros de confiiguración, ahora puedes probar con la misma configuración dede Delphi, e incluso hacer la prueba con varios componentes, no sea que el que estás probando tenga algun bug.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Buenas, como me dijiste probé con la HyperTerminal y configure las mismas propiedades en delphi.
para comprobar que no fuera un defecto del componente he realizado una prueba simplemente haciendo un ping en bucle cada 1 seg a la arduino uno y a su vez escribiendo un texto en la terminal, en la hyperterminal funciona también correctamente, pero Delphi sigue comiéndose caracteres. los parámetros que utilizo son: *COM3 *9600 Bits x segundo *8 bits de datos *ninguna paridad *1 bits de parada *ningún control de flujo crees que hay algún otro parámetro que no este teniendo en cuenta? como explique en el primer post cuando aumento los bits x segundo (BaudRates), poniéndolos al valor máximo, parece que mejora, pero sigue sin leer del todo correctamente. según parece, con la configuración que te he detallado, cuando el componente envía una string "hello world", Delphi imprime sin acabar de recibir la cadena completa y a su vez acumula el resto de caracteres en la memoria para la siguiente impresión, de esta forma imprime el texto así: "hell o wor ld" es decir, la función ComPort1RxChar se ejecuta nuevamente sin finalizar la lectura, alguna idea de como poder corregir este procedimiento? también podría estar relacionado con el buffer, actualmente tengo 1024 inputsize y 1024 outputsize.. |
#6
|
|||
|
|||
Cita:
Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#7
|
|||
|
|||
Buenas egostar, gracias x tu aporte.
Ante todo comentar que tambien realice una prueba con la terminal de la librería COM y he observado que las terminales concatenan la información de la lectura por lo que la solución para obtener un memo como terminal es tan sencilla como concatenar el mismo memo: memo.text:=memo.text+STR, actualmente en el proyecto tengo hecho un Blink a un led, cada segundo enciende/apaga un led y envía la string LED ON / LED OFF, el objetivo es poder recoger la string exacta "LED ON" y trasladarla a un label según tu aporte estuve indagando y la libreria de Comport tine unas propiedades llamadas EofChar y EventChar he estado haciendo varias pruebas pero no he conseguido integrarlos. también probé con el componente ComDataPacket, dispone de dos propiedades llamadas StartString y Sopstring tambien sin éxito.. alguno podría guiarme sobre como establecer el final de la cadena? |
#8
|
|||
|
|||
Hola, intenta con esto:
Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#9
|
|||
|
|||
La solución temporal que realizado ha sido agregar un condicional de escritura y gestionar la petición de los datos desde un timer en delphi,
de esta forma cuando delphi envia un "ok" al puerto COM arduino envia los angulos del giroscopio: codigo arduino Cita:
Codigo Delphi: Cita:
Gracias a todos x los consejos |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Delphi y Arduino | REHome | OOP | 3 | 14-07-2017 14:14:42 |
Kit Arduino para Delphi | K-ba | ASM y Microcontroladores | 9 | 25-03-2017 16:58:01 |
Cual es el equivalente de C# byte[] buffer = new byte[256]; para delphi? | yatzenco | Varios | 1 | 20-01-2016 17:56:34 |
Leer byte a byte un fichero binario | NPIdea | C++ Builder | 2 | 22-03-2012 16:36:34 |
ADO: Byte nulo (byte #0) en un string | Pandre | Conexión con bases de datos | 0 | 02-04-2004 20:18:37 |
|