Sensörden Aldığım Veriyi İşleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
beenwew
Üye
Mesajlar: 2
Kayıt: 07 Oca 2022 10:32

Sensörden Aldığım Veriyi İşleme

Mesaj gönderen beenwew »

STM32 Nucleo kartı ile imu sensörden aldığım açı bilgilerini Delphi'de bu verileri kullanarak birkaç işlem yaptırmak istiyorum. Verileri DMA ile yolluyorum.x ve y verilerini ayrı ayrı kullanacağımdan gönderdiğim veriyi ayırmak için araya split_data = '#' atadım.
(STM32 kısmı)

Kod: Tümünü seç

HAL_UART_Transmit_DMA(&huart2,(uint8_t *)datau, sprintf(datau, "%1.0f%c%1.0f",x,split_data,y));
Daha sonra Delphi kısmında verileri ayırmak için aşağıdaki yöntemi denedim, verileri alıyorum ama karışık bir şekilde geliyor. Başka bir yöntem önerecek ya da herhangi bir tavsiyede bulunabilecek olan var mı? (Delphi'de fazla iyi değilim yeni başladım cevaplarınızı detaylandırırsanız çok iyi olur :) )

Kod: Tümünü seç

procedure TForm1.comportRxChar(Sender: TObject; Count: Integer);
var
  rxcount : integer;
  i : integer;
  x_temp : string;
  x, y : integer;
  rxcomport : string;
begin
        rxcount := comport.InputCount;
        comport.ReadStr(rxcomport,rxcount);
        
        if Pos('#',rxcomport) <> 0 then
        begin
        repeat
          x_temp := copy(rxcomport,1,Pos('#',rxcomport));
          delete(rxcomport,1,Pos('#',rxcomport));
          x := StrToInt(x_temp);
        until (Pos('#',rxcomport) = 0);
        end;
        y := StrToInt(rx_comport);
end;
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Sensörden Aldığım Veriyi İşleme

Mesaj gönderen ertank »

Merhaba,

Kullandığınız Delphi sürümü nedir?
Veriler karışık şekilde geliyor ile ne demek istediniz?
beenwew
Üye
Mesajlar: 2
Kayıt: 07 Oca 2022 10:32

Re: Sensörden Aldığım Veriyi İşleme

Mesaj gönderen beenwew »

Rad Studio 11 kullanıyorum. Mesela sensörden x ve y açılarını alıyorum x açısını okuyorum ama y açısını okuyamıyorum. Bazen de x açısı ara karakterle birlikte geliyor böyle olduğunda da aldığım veriyi integer değişkene çevirirken sıkıntı oluyor ve sistem kilitleniyor.
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Sensörden Aldığım Veriyi İşleme

Mesaj gönderen ertank »

Merhaba,

Öncelikle sizin paylaştığınız kod INTEGER ayıklama yapmaya çalışmış. Ancak gönderilen veri DOUBLE gözüküyor. Bu noktada bir uyumsuzluk var gibi.

Veri iletim koduna bakıldığı zaman sadece # karakteri ile ayrılmış iki ondalıklı rakam gözüküyor. Bunu son sürüm Delphi ile aşağıdaki şekilde parçalayabilirsiniz

Kod: Tümünü seç

procedure ParseRawPositionData(const RawData: string; out X, Y: Double);
var
  List: TArray<string>;
  AFormatSettings: TFormatSettings;
begin
  AFormatSettings := TFormatSettings.Create('en-US');
  List := RawData.Split(['#']);
  X := StrToFloat(List[0], AFormatFloat);
  Y := StrToFloat(List[1], AFormatFloat);
end;
Ancak sizin anlatmaya çalıştığınız "gelen veri bazı dış etkenlerden dolayı bozuluyor, olmaması gereken karakter veya eksik karakter içeriyor" durumu ise bunun için kurulu yapıyı incelemeli, gerekli manyetik ve parazit yalıtımları yapmalı ve gelen verinin doğru olmasını sağlamalısınız diye düşünüyorum.

Bu imkan gerçek anlamda yok ise gelen veride sadece istenilen karakterleri (rakam, nokta ve # karakteri) bırakacak ve diğerlerini silecek ön bir fonksiyon kullanmanız gerekecektir. Bundan sonra X ve Y değerlerinin halen bozuk olma ihitmaline karşı da X ve Y değer kontrolleri yapmanız gerekir.

NOT: Kodu şifaen yazdım. Test edilmedi.
Cevapla