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:
void loop(){
while (Serial.available() > 0){
caracter = Serial.read();
comando.concat(caracter);
delay(10);
}
// Si los carácteres es recibido y verdadero.
if (comando.equals("ok") == true) {
Serial.print (accel_ang_x);
Serial.print("/");
Serial.print(accel_ang_y);
}
// Limpiamos la cadena para volver a recibir el siguiente comando.
comando = "";
}
|
desde delphi, el timer envia un "ok" al puerto COM, y lee los datos con el RXChar para guardarlos en un Label, con Label1:=Label1+srt,
Codigo Delphi:
Cita:
procedure TForm1.Button1Click(Sender: TObject);
begin
comport1.Open;
if timer1.Enabled=false then
begin
timer1.Enabled:=true;
end
else
begin
timer1.Enabled:=false;
end;
end;
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
Str: String;
begin
// Recibe mensajes desde Arduino.
ComPort1.ReadStr(Str, Count);
// Muestra los mensajes en pantalla.
label1.Text:=label1.Text+str;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
comport1.Port:='COM3';
comport1.BaudRate:=br115200;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comport1.Close;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.text:='';
ComPort1.WriteStr('ok'); // Envía el comando "ok" al puerto.
end;
|
Gracias a todos x los consejos