Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-12-2013
jhonson01 jhonson01 is offline
Registrado
NULL
 
Registrado: ago 2013
Posts: 2
Poder: 0
jhonson01 Va por buen camino
Separar Datos CPortLib Lazarus

Hola amigos.

Quisiera saber como pudiera separar los datos que envío desde mi Arduino Mega por puerto usb a lazarus de una forma efectiva.

Los datos que llegan al puerto COM son de la siguiente forma:

a
variable1
variable2
variable3
variable4
variable5


En lazarus leo el puerto de la siguiente manera en un timer cada 1 segundo:

ComPort1.Connected:=true;
ComPort1.Open;
sleep(300);
ComPort1.ReadStr(Str,1000);
Memo1.Text:=Str;
Edit1.Text:=Memo1.Lines.Strings[2];
Edit2.Text:=Memo1.Lines.Strings[3];
Edit3.Text:=Memo1.Lines.Strings[4];
Edit4.Text:=Memo1.Lines.Strings[5];
Label1.Caption:=DateTimeToStr(now);

Pero el problema es que aveces llegan unos datos y aveces no.

Entonces... Cómo puedo condicionar para sincronizar los datos a partir de esa "bandera" que envío que en este caso es la letra "a" de tal forma que al separar los datos no me genere problemas?.

De antemano gracias.
Responder Con Cita
  #2  
Antiguo 23-12-2013
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
No he entendido muy bien, pero supongo que el problema es que a veces te llegan 6 lineas (bandera + 5 lineas) y otras llegan menos.
Podrías obtener la cantidad de líneas de Memo1 y luego rellenar los Edits que sea posible:
Código Delphi [-]
Memo1.Text:=Str;
Lineas := Memo1.RowCont;

if (Lineas >= 3) then
   Edit1.Text:=Memo1.Lines.Strings[2];
if (Lineas >= 4) then
   Edit2.Text:=Memo1.Lines.Strings[3];
if (Lineas >= 5) then
   Edit3.Text:=Memo1.Lines.Strings[4];
if (Lineas >= 6) then
   Edit4.Text:=Memo1.Lines.Strings[5];
otra opción, si no he entendido mal el tema del flag sería:
Código Delphi [-]
Memo1.Text:=Str;
Flag := Memo1.[0];
if (Flag = 'a') then
   Edit1.Text:=Memo1.Lines.Strings[2];
if (Flag = 'b') then
   Edit2.Text:=Memo1.Lines.Strings[3];
if (Flag = 'c') then
   Edit3.Text:=Memo1.Lines.Strings[4];
if (Flag = 'd') then
   Edit4.Text:=Memo1.Lines.Strings[5];
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema al obtener los datos de una SQL query con Lazarus Pedrote Lazarus, FreePascal, Kylix, etc. 10 26-12-2012 11:07:45
Componente Cportlib (puerto serie) Duda tulio Varios 11 08-03-2011 00:28:17
acceso a datos sqlite3 lazarus anubis Lazarus, FreePascal, Kylix, etc. 2 10-12-2009 18:12:29
Lazarus y dos módulos de datos PabloTech Lazarus, FreePascal, Kylix, etc. 12 03-09-2008 23:20:52
Lazarus con bases de datos fwhite Lazarus, FreePascal, Kylix, etc. 2 12-12-2006 01:05:42


La franja horaria es GMT +2. Ahora son las 00:51:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi