Uart üzerinden alınan verinin İnt türüne çevrilmesi

Başlatan papsukkal, 15 Nisan 2024, 18:12:23

papsukkal

Herkese merhaba.

HC05 Bluetooth modül üzerinden x;y formatında datalar alıyorum. x her zaman 1 byte ve harften oluşuyor. y ise içinde tam sayı barındıran 1 ile 4 byte arasında uzunluğu değişebilen dizi ve negatif sayılar da içerebiliyor.

x ve y içeriğini ayıklayabiliyorum.

y nin içeriğindeki datayı int değişkenine atamam gerekiyor.

Gelen datayı byte byte işleyerek bol miktarda if-else kullanarak yapmak istemiyorum çünki ortalık çok karışıyor.

atoi() fonksiyonu önerilmiş. Lakin bilgisayar programcılığında bu fonksiyon direk kullanılabilirken sanırım işlemci kodu yazarken pointer ile kullanılması gerekiyor. Ya da ben öyle anladım. Sonuç itibarı ile atoi() fonksiyonu sürekli pointer ile ilgili bir hata verip çalışmıyor. Bu arada pointer kullanımı ile ilgili sıkıntılarım olduğunu itiraf etmem lazım.

Negatif değerler dahil bu dönüşümü yapabileceğim fonksiyon atoi() midir? Eğer bu ise nasıl kullanmalıyım? mümkün ise kullanılacak değişkenlerin tanımı dahil bir örnek verir misiniz?
Ya da bu dönüşümü yapabileceğim pratik ve sağlıklı başka hangi yöntemler var?

fide

Keyword: substring
İnt dönüşü yapılacak kısım bölündükten sonra atoi

Dil belirtilmemiş ama Arduino diye tahmin ediyorum.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

sigmoid

union araştırmanızı öneriyorum. Veriyi gönderen programıda sizmi yazıyorsunuz. Veri gönderirken veya kaydederken union yapılarını kullanmayı tercih ediyorum. Temel mantık aynı adresi gösteren farklı veri tipleri oluyor. Hesaplamalarda kendi tipini kullanırken veri gönderir veya alırken byte dizisini kullanmayı tercih ediyorum. Cepten yazdığımdan uzun uzun yazamıyorum

papsukkal

Alıntı yapılan: fide - 15 Nisan 2024, 20:33:23Keyword: substring

Dil belirtilmemiş ama Arduino diye tahmin ediyorum.

Evet belirtmeyi unuttum. İşlemci STM32F030F4. Platform Cube ide.


Alıntı yapılan: sigmoid - 15 Nisan 2024, 21:00:14union araştırmanızı öneriyorum. Veriyi gönderen programıda sizmi yazıyorsunuz. Veri gönderirken veya kaydederken union yapılarını kullanmayı tercih ediyorum. Temel mantık aynı adresi gösteren farklı veri tipleri oluyor. Hesaplamalarda kendi tipini kullanırken veri gönderir veya alırken byte dizisini kullanmayı tercih ediyorum. Cepten yazdığımdan uzun uzun yazamıyorum

Diğer taraf telefon hocam. App Inventor. Anlattıklarınız mantığına yattı.  Ama bunun üstesinden gelebilecek kadar bilgim yok malesef. Araştırıp deniyeyim. Ama işin içine gene pointer giriyor maalesef.

mustafa_cmbz

Alıntı yapılan: papsukkal - 15 Nisan 2024, 18:12:23Herkese merhaba.

HC05 Bluetooth modül üzerinden x;y formatında datalar alıyorum. x her zaman 1 byte ve harften oluşuyor. y ise içinde tam sayı barındıran 1 ile 4 byte arasında uzunluğu değişebilen dizi ve negatif sayılar da içerebiliyor.


haritalandırma gibi vs. birşey mi yapıyorsunuz hocam ?

papsukkal

Alıntı yapılan: mustafa_cmbz - 15 Nisan 2024, 22:40:51haritalandırma gibi vs. birşey mi yapıyorsunuz hocam ?

Mustafa Hocam kontrolü tamamen telefonda olan cihaz yapıyorum. İki taraflı haberleşme var.

Bluetooth bağlantısı yapıldığında cihaz o anki durumunu telefona bildiriyor. Daha sonra telefondan yapılırsa eğer değişiklikler cihaza aktarılıyor. İlk bytete bulunan harf sonraki bytelerdeki rakamların ne için kullanılacağını belirliyor. Cihazdan telefona giden datalarda sorun yok. ancak telefondan cihaza giden dataları okumayı sağlıklı yapamıyorum. Her byte içeriğini hesaplayıp int değişkene atıyorum ancak tek basamak, iki basamak, eksi tek basamak ve eksi çift basamak için ayrı fonksiyon yazmam gerekiyor. Bunun daha basit ve kolay yöntemlerini arıyorum

fide

Keyword: Nmea0183
GPS verileri uart üzerinden gönderilirken
anahtar,A,B,C,D,E,F...

şeklinde gönderiliyor, ilk virgülden ikinciye kadar tarih, ikinciden üçüncüye kadar enlem, boylam, yön, açı gibi gibi devam ediyor.

Gönderici taraf siz iseniz araya gönderdiğiniz veri içinde bulunmayan ?@,!#-; gibi seperatör karakter kullanın. Bu sayede seperatör ile verileri ayırıp sonra tip dönüşümü yaparsınız. Hem anlaşılır hem de geliştirmeye açık olur. Bugün 5 komut varsa yarın 50 tane olabilir. Dereyi geçerken at değiştirmek zorunda kalmazsınız.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

papsukkal

Alıntı yapılan: fide - 16 Nisan 2024, 09:23:00Keyword: Nmea0183
GPS verileri uart üzerinden gönderilirken
anahtar,A,B,C,D,E,F...

şeklinde gönderiliyor, ilk virgülden ikinciye kadar tarih, ikinciden üçüncüye kadar enlem, boylam, yön, açı gibi gibi devam ediyor.

Gönderici taraf siz iseniz araya gönderdiğiniz veri içinde bulunmayan ?@,!#-; gibi seperatör karakter kullanın. Bu sayede seperatör ile verileri ayırıp sonra tip dönüşümü yaparsınız. Hem anlaşılır hem de geliştirmeye açık olur. Bugün 5 komut varsa yarın 50 tane olabilir. Dereyi geçerken at değiştirmek zorunda kalmazsınız.

Hocam Formatım bu zaten. Tip dönüşümünde sıkıntı yaşıyorum. STM e gelen veriyi de ayrıştırıyorum, ama sayıları char formatındaki diziden int tipindeki değişkene sağlıklı aktaramıyorum.

fide

Alıntı yapılan: papsukkal - 15 Nisan 2024, 18:12:23HC05 Bluetooth modül üzerinden x;y formatında datalar alıyorum. x her zaman 1 byte ve harften oluşuyor. y ise içinde tam sayı barındıran 1 ile 4 byte arasında uzunluğu değişebilen dizi ve negatif sayılar da içerebiliyor.

y nin içeriğindeki datayı int değişkenine atamam gerekiyor.

Bu metinden y içeriğini sağlıklı olarak parse edebildiğiniz anlaşılmıyor.
Parse işlemini içerecek şekilde öneride bulundum.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

papsukkal

#9
@fide haklısın. Şimdi ben de okuyunca sizin gibi algıladım.

Düzelttim.