rs232 veri ayıklama

Başlatan enigmagazi, 02 Ağustos 2011, 11:08:51

enigmagazi

pc den 13415 şeklinde bir veri gonderilicek ben bu veriden baştaki 1 i ve sonraki 3415 verisini ayrı ayrı almak istiyorum bir projede kullanılacak ikitane motor var baştaki 1 verisi motorlardan hangisi oldugunu sonraki 4 rakkamda hızlarını veriyo nasıç ayıra bilirim bu ikisini yardım...

kudretuzuner

Merhaba
Aklıma ilk gelen,PC'den yollanan beş adet sekiz baytlık bu datalardan ilk baytını yolladıktan sonra yazılımsal olarak seriportu kapatın belli bir süre gecikme koyun(yani seriportu bir süre açmayın)yollanan ilk data ile yapılması gereken operasyonu yapın.Delay zamanı sonunda seriportu tekrar açın ve sıra ile son dört baytlık dataları yollayın. 
Amatör

uardal

biz böyle bir uygulama yapıyoruz şu anda, veriler byte byte geleceği için picin içinde bir rx kesmesi oluşturun gelen herbaytı ayrı bir değişkene atın, ilk byte ı alıp istedğiniz yerde kullanın diğerlerinide matematiksel olarak toplayıp gerekli bölüme gidebilirsiniz.

iyildirim

Zaten göndereceğiniz veri string olarak gidecek.
UART'dan da verileri tek tek alacaksınız. Bu ya bir kesme yada bir döngü içerisinde yapılacak, ki kesme kullanmak daha verimli.
Öncelikle bir karakter array'i buffer olarak  kullanarak gelen veriyi bu buffer'a almalısınız.

Gönderdiğiniz veri boyu ya sabit olmalı, ki sizin durumunuzda  bu 5 bayt ve 1 değeri gönderirken de 11 değil 10001 gibi göndereceksiniz, yada veri paketinin arkasına <cr> gibi birşey koyacaksınız.
Yinede veri kaybı olması durumunda hız ve hangi motor olduğunun bilgisinin karışmaması için bir nümerik olmayan başlangıç karakteri kullanılması daha mantıklı.

Her iki halde de alınan ilk bayt'ı hangi motora veri geldiğini belirten bir değişkene atın. 1 için 1 yani char(49) gönderiyorsanız, bunun değerinden 48 çıkartmalısınız.
Diğer 4 bayt içinde atoi gibi bir fonksiyon kullanarak integer bir değere çevirebilirsiniz.

Ben yapacak olsam kaç motor varsa hızları için bir integer array oluşturur, gelen ilk baytı da bu arrayın indisi olarak kullanırdım. Bu durumda ilk motorun indisi 0 olacaksa ilk karakterden 48 değil, 49 çıkartmalısınız.


enigmagazi

mesela nasıl yapıcam bunu nasıl ayırcam < 1 diğer kısmı od olarak örnek göstere bilirmisiniz.