logo
Merhaba arkada┼člar, bu dersimizde C# ile seri port kullan─▒m─▒n─▒ detayl─▒ olarak anlatmaya ├žal─▒┼čaca─č─▒m. C# ile string, byte ve char t├╝r├╝ veri g├Ânderip alma i┼člemlerini inceleyece─čiz. Ayr─▒ca seri porttan otomatik veri okuma i┼člemini ├Â─črenece─čiz. ├ľlncelikle seri port nesnesini kullanabilmek i├žin, System IO Ports k├╝t├╝phanemizi projemize dahil ediyoruz. Bunun i├žin sayfam─▒z─▒n en ├╝st k─▒sm─▒na using System.IO.Ports; kodunu ekleyerek derleyiciye giri┼č ├ž─▒k─▒┼č portlar─▒n─▒ kullanaca─č─▒m─▒z─▒ bildiriyoruz. Seri port nesnesini kullanabilmek i├žin ├Âncelikle bir seri port olu┼čturuyoruz.
namespace SeriPort
{
    public partial class main : Form
    {
        SerialPort sp = new SerialPort(); // Seri port nesnesi olu┼čturuyoruz
        sp.PortName = "COM1"; // Kullanaca─č─▒m─▒z seri port ad─▒n─▒ se├žiyoruz (String)
        sp.BaudRate = 19200;  // Seri haberle┼čme h─▒z─▒n─▒ se├žiyoruz (int32)
        sp.DataBits = 8; // g├Ânderece─čimiz bilginin ka├ž bitten olu┼čaca─č─▒n─▒ bildiriyoruz (int32).
        sp.Parity = Parity.None; // E┼člik bitidir. G├Ânderilen verinin do─črulu─čunu kontrol etmek i├žin kullan─▒l─▒r. 
        sp.StopBits = StopBits.One; // Stop bitinin ka├ž bit olaca─č─▒n─▒ belirtir.
    }
}
Yukar─▒da verdi─čimiz kodlar─▒ inceleyelim; PortName : Seri port ad─▒n─▒ belirtir. String t├╝r├╝ de─čer al─▒r. Bilgisayar─▒n─▒zda ba─čl─▒ olan seri portlar─▒ ayg─▒t y├Âneticisinden g├Ârebilirsiniz. Port ad─▒ kesinlikle belirtilmeli. BaudRate : Seri haberle┼čme h─▒z─▒n─▒ belirtir. int32 t├╝r├╝ de─čer al─▒r. Bir saniyede g├Ânderilebilecek maksimum bit say─▒s─▒d─▒r. Al─▒c─▒ ile ayn─▒ de─čer almak zorundad─▒r. Standartla┼čm─▒┼č olarak 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 de─čerlerini alabilir. Varsay─▒lan de─čeri 9600 Baud'dur. DataBits : G├Ânderilecek her bilgini/karakterin ka├ž bitten olu┼čaca─č─▒n─▒ belirtir. int32 t├╝r├╝ de─čer al─▒r. 5 ile 8 aras─▒nda de─čer alabilir. Genelde 7 ve 8 de─čerini al─▒r. Varsay─▒lan de─čeri 8'dir. Parity : E┼člik bitinin say─▒s─▒n─▒ belirtir. Al─▒nan verinin do─črulu─čunu kontrol etmek i├žin kullan─▒l─▒r. None (0), Odd (1), Even (2), Mark (3), Space (4) de─čerlerini alabilir. Varsay─▒lan de─čeri None 'dur. StopBits : Durdurma bitinin ka├ž bit olaca─č─▒n─▒ belirtir. One (1), Two(2), OnePointFive(3) de─čerlerini alabilir. Varsay─▒lan de─čeri One 'd─▒r. Seri portu tek sat─▒r kod ile olu┼čturabiliriz;
SerialPort sp = new SerialPort("COM1",9600,Parity.None,8,StopBits.One);
Seri port nesnesini tan─▒mlad─▒ktan sonra veri g├Ânderip alabilmek i├žin seri portumuzu a├žmam─▒z gerekiyor. Bunun i├žin Open() fonksiyonunu ├ža─č─▒r─▒yoruz. E─čer seri port ba┼čka bir cihaz taraf─▒ndan kullan─▒yorsa portumuz a├ž─▒lmayacakt─▒r. ├ç├╝nk├╝ bir seri port ayn─▒ anda bir uygulama ya da bir cihaz taraf─▒ndan kullan─▒labilir.
sp.Open(); // Seri portumuzu a├ž─▒yoruz
Seri Port Veri G├Ânderme : Seri porta veri g├Ândermek i├žin Write() fonksiyonu kullan─▒l─▒r. G├Ânderilen veri String, Byte dizisi ya da Char dizisi olabilir. String t├╝r├╝ veri g├Ândermek i├žin parantezler i├žerisinde ├çift t─▒rnak i├žerisinde g├Ânderilecek veri yaz─▒l─▒r. ├ľrnek:
sp.Write("Yaz─▒"); // Burada String t├╝r├╝ veri g├Ânderdik
Byte ya da Char dizisi g├Ândermek i├žin ise parantezler i├žerisinde dizi de─či┼čkeni, g├Ânderilecek dizinin ba┼člang─▒├ž indisi, ve dizide g├Ânderilecek indis say─▒s─▒ yaz─▒l─▒r. Seri port Byte dizisi g├Ânderme ├Ârnek:
/* 
* ├ľrnek olarak veri ad─▒nda bir byte dizisi olu┼čtural─▒m
* Burada byte de─či┼čkeninin 8 bitlik say─▒ olu┼čtu─čunu 
* g├Âz ard─▒ etmeyin
*/
byte[] veri = new byte[] {12, 15, 22, 25};
/*
* ┼×imdi veri dizimizin s─▒f─▒r─▒nc─▒ indisinden son indisine kadar
* olan t├╝m verileri seri porta yazd─▒ral─▒m.
*/
sp.Write(veri, 0, veri.Length); 
Seri port Char dizisi g├Ânderme ├Ârnek:
/*
* ├ľrnek olarak bir char dizisi olu┼čtural─▒m
*/
char[] karakter = new char[] { 'a','1', (char)15,};
/*
* ┼×imdi dizinin t├╝m elemanlar─▒n─▒ seri porta yazal─▒m
*/
sp.Write(karakter, 0, karakter.Length);
Seri Port Veri Okuma : Bu konuda bir ├žok ki┼či s─▒k─▒nt─▒ ya┼čamaktad─▒r. Seri port sadece a├ž─▒k oldu─ču zaman veri alabilir. Bir timer yard─▒m─▒yla s├╝rekli seri port kontrol edilebilir yada seri portun DataReceived eventi ile seri port dinlenebilir. Timer kullanarak seri porttan al─▒nan veride kay─▒p ya┼čanma ihtimali y├╝ksektir. Bu sebeple biz DataReceived eventini kullanaca─č─▒z. Bunun i├žin ├Âncelikle DataReceived eventini tan─▒mlamam─▒z gerekiyor.
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
Ve ard─▒ndan fonksiyonumuzu yaz─▒yoruz:

private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
}
Bu event i├žerisinde seri porttan gelen bilgileri otomatik olarak okuyup bir de─či┼čkene aktarabiliriz ya da textBox, listBox gibi ara├žlara yazd─▒rabiliriz. Birka├ž ├že┼čit okuma ┼čeklimiz vard─▒r. 1- ReadExisting() fonksiyonu ile String olarak okumay─▒ g├Ârelim;
string veri = sp.ReadExisting();
2- ReadLine() fonksiyonu ile yine Strig t├╝r├╝nde sat─▒r sat─▒r okuma;
string veri = sp.ReadLine();
3- Read() fonksiyonu ile Byte dizisi olarak okuma:
/*
*├ľncelikle okuyaca─č─▒m─▒z veriyi atayaca─č─▒m─▒z dizimizi olu┼čturuyoruz.
*Dizimizin uzunluk de─čeri gelen byte say─▒s─▒ kadar olmal─▒
*BufferSize bize gelen verinin uzunlu─čunu verir.
*/
byte[] veri= new byte[sp.ReadBufferSize];

/*
*Ard─▒ndan Read() fonksiyonu ile gelen her byte bilgisini 
*veri dizisine aktar─▒yoruz.
*/
sp.Read(veri,0,sp.ReadBufferSize);
Read() fonksiyonu ile byte dizisi gibi char dizisi ┼čeklinde de okuma yapabiliriz. 4- ReadByte() ve ReadChar() fonsiyonlar─▒ ile bir byte ve bir char veri okuma:
int veri = sp.ReadByte(); // Seri porttan integer t├╝r├╝nden 1 byte veri okur
int veri = sp.ReadChar(); // Seri porttan integer t├╝r├╝nden 1 karakter veri okur
Di─čer Seri Port Fonksiyonlar─▒: Close(); Seri portu kapat─▒r. ReadTimeout; Okuma zaman a┼č─▒m─▒n─▒ ayarlar. Milisaniye cinsinden de─čer al─▒r. WriteTimeout; Yazma zaman a┼č─▒m─▒n─▒ ayarlar. Milisaniye cinsinden de─čer al─▒r. DiscardInBuffer(); Gelen veri haf─▒zas─▒n─▒ temizler. DiscardOutBuffer(); Giden veri haf─▒zas─▒n─▒ temizler. IsOpen; Seri portun a├ž─▒k ya da kapal─▒ oldu─ču bilgisini verir. True ya da False olarak bool cinsinden iki farkl─▒ de─čer d├Ând├╝rebilir. DtrEnable; Seri port DTR pinini aktif ya da pasif yapmak i├žin kullan─▒l─▒r. Bool cinsinden True ya da False olmak ├╝zere iki farkl─▒ de─čer alabilir. DTR pini cihazlar aras─▒ els─▒k─▒┼čma da denilen, cihaz─▒n veri almaya haz─▒r oldu─čunu bildiren pindir. RtsEnable; Seri port RTS pinini aktif ya da pasif yapmak i├žin kullan─▒l─▒r. Bool cinsinden True ya da False olmak ├╝zere iki farkl─▒ de─čer alabilir. RTS pini cihazlar aras─▒ els─▒k─▒┼čma da denilen, cihaz─▒n veri g├Ânderece─čini bildiren pindir. L├╝tfen yorumlar─▒n─▒z─▒ eksik etmeyin. Hemen a┼ča─č─▒dan bu dersi oylayabilirsiniz.
  • Yazar : Samet Karaca
  • Ekleme Tarihi : 12.05.2018
  • G├Âr├╝nt├╝lenme : 127
  • Kategorideki di─čer Dersleri : C Sharp
  • Facebook Twitter Google Plus Freelyshout Youtube Web Site
Bu Dersi Be─čendiniz mi?

0% YARARLI

KATEGOR─░LER