Seriporttan Alınan Verileri CCS C'de Bölme

Başlatan Lenin, 17 Ekim 2017, 15:59:15

Lenin

Merhabalar. Bilgisayarın seri portundan aldığım verileri ccs c de nasıl bölebilirim?
Mesela bilgisayardan ayrı ayrı sensörlerden aynı anda bilgiyi aldım ama aynı anda aldığımdan dolayı bitişik geliyor. Nasıl bölebilirim?

fide

Verileri gönderirken <sens1=13><sens2=5><sens3=4> şeklinde gönder.
Bilg tarafında string ifadeyi önce <> lere sonra parantez aralarını okuyup = ile sensor adını ve değeri ayır.
Sorunu doğru anladıysam ben bu şekilde yapardım. Ama soruda farkli picler ike tek seri porta mı veti gönderiyor, bit pice bağlı farklı sensor değetleti mi gönderiliyor açık değil.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

tunayk

@fide sanırım arkadaşın sorduğu sizinkinin tam tersi olacak. Netekim CCS C de nasıl yapılır demiş.  Bu durumda ;

seri porttan gelen veriler için Alinan[100] gibi bir buffer array'ınız vardır muhtemelen. Yoksa da olmalıdır. PC den gelen datalar öncelikle, @fiden'nin dediği gibi ayrıştırılabilecek bir biçimde hazırlanır. Bu biraz sizin keyfiyetinize kalmış olup 10.1,100.34,35.3 veya #10.1#100.34#35.3# şeklinde bir veri bloğu oluşturulur. "," ,"#" veya farklı bir karakter, CCS tarafında sizin ayrıştırmak için kullanacağınız köşe taşı olacaktır. İllaki <sens1=10.1> demeye gerek yok. Her iki tarafıda yazan siz olunca ve verileri de her daim aynı sıra ile göndereceğinizi varsayarsak sadece sayısal değerlerin arasına ayraç karakter koymanız yeterli olur.   Kolaylık için veriyi 010.10#100.34#0035.30# şeklinde paketlersiniz. CCS te de veriyi koyduğunuz arrayda baştan itibaren "#" işaretine kadar sırayla byte byte okuyarak sayıyı oluşturursunuz. Hatta sabit uzunlukta sayı dizileri kullanırsanız ayraç karaktere bile gerek yok. Bir for döngüsünde 6'şar karakter alıp kullanırsınız.

Örneğin sayıları da ASCII olarak göndermiş olun ;

float Sayi = 0;
Sayi =   (float)(Alinan[0] - 48 )*  100;
Sayi += (float)(Alinan[1] - 48 )*  10;
Sayi += (float)(Alinan[2] - 48 );
Sayi += (float)(Alinan[4] - 48)*0.1;
Sayi += (float)(Alinan[5] - 48)*0.01;

Şeklinde sayıları elde edersiniz. Float kullanmak zorunlu değil, uygulamanıza göre aynı mantıkla yürüyebilirsiniz.

SpeedyX

Packed struct olarak direkt gönderirsen ayırmaya gerek olmaz.