Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Separar Datos CPortLib Lazarus (https://www.clubdelphi.com/foros/showthread.php?t=84899)

jhonson01 22-12-2013 06:12:10

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.

duilioisola 23-12-2013 18:03:03

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];


La franja horaria es GMT +2. Ahora son las 02:28:29.

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