02-09-2016, Saat: 16:34
(Son Düzenleme: 02-09-2016, Saat: 16:38, Düzenleyen: Fesih ARSLAN.)
Merhaba,
Delphi IDE'si ile COM port'una bağlı herhangi bir cihazla iletişime geçmek için harici bileşenler kullanıyoruz. (Tuğrul Hocamızın yeni oluşturacağı Low Level bölümünde İnşaallah iletişim kodlarını kendimiz yazarız)
Burada ücretli ve ücretsiz olmak üzere 2 farklı alternatifimiz var. Ben her ikisini de kullanıyorum. Ücretli olanlardan Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol, ücretsiz olanlardan ise Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol'yu kullanıyorum.
Her ikisini de anlatabilirim. Fakat bu tip bileşenlerin kullanım ve çalışma prensibi üç aşağı beş yukarı aynıdır.
Burada örnek olması açısından Delphi IDE'sinde Turbo Power AsyncPro componet seti ile nasıl kullanacağımızı anlatmak istiyorum. (Talep olursa Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol kullanımını da ayrı bir makale de anlatabilirim)
yhackup, Arduino programlama kodları ile Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol paylaşmış. Bu konuda benim de bir katkım olsun. Ben de Delphi ile nasıl yapabileceğimizi anlatayım.
Bir örnekle; Edit ile yazılan komutu, buton aracılığıyla cihaza iletme, cihazımızdan gelen geri dönüşü ise Memo'ya yansıtacağımız örnek bir uygulama yapalım.
Uygulama ara yüzü için;
Yeni bir VCL Form Application uygulaması oluşturalım.
Ana form üzerinde birer adet Button, Edit ve Memo nesnesi yerleştirelim.
Cihazdan gelen bilgileri alıp, mevcut formda kullanılmak üzere aktaracağımız bir değişken tanımlayalım.
Tool Palette penceresinde, APRO sekmesinden bir adet ApdComPort nesnesini forma yerleştirelim.
(Component'i kurmamış olanlar yukarıda indirme linkini paylaşmıştım, indirip kurulum yapabilirler. Delphi 10 Seattle, Delphi 10.1 Berlin kullananlar ise
doğrudan GetIt Manager ile doğrudan kurabilirler)
İlk olarak formun OnCrete olayında, COM port bağlantısını yapacak olan, ApdComPort nesnesinin temel özelliklerini
belirleyelim.
Yukarıdaki kod blokları arasında hangi özelliğin ne amaçla kullanıldığını yazdım. Açıklama yapmadığım özellikler ise veri iletişiminde kullanılan temel ve varsayılan özelliklerdir.
Dolayısıyla bu özelliklerin varsayılan değerlerde kalması veri iletişim hızınızı optimize edecektir.
Bu tip uygulamalarda cihaz ile uygulamamız arasındaki tüm hareketlerin algılanması ve bir log benzeri panele yansıtılması son derece önemlidir.
Bunun için uygulamamızda bir Memo nesnesi kullandık.
Şimdi cihazın bağlı olduğu COM portu ile bağlantı durumunu kontrol ederek, Memo nesnesine yansıtalım.
ApdComPort nesnesinin OnPortOpen olayı, başarılı bir bağlantıda çalışmaktadır.
Bu olaya aşağıdaki kodu yazalım.
ApdComPort nesnesinin OnPortClose olayı ise, COM port bağlantısının kesildiği anda çalışmaktadır.
Bu olaya da aşağıdaki kodu yazalım.
İletişim kurduğumuz cihazdan gelen tüm verilerin yakalanabildiği ApdComPort olayı ise OnTriggerAvail'dir.
Bu olaya da aşağıdaki kodu yazalım.
Son olarak Cihazımıza bir komut göndermek için Button nesnesinin OnClick olayına aşağıdaki kodu yazalım.
Bu kod içerisinde yer alan ApdComPort'un, PutString metodu, metinsel veriyi cihaza iletmeyi sağlamaktadır.
Not: Nesne isimlendirmeleri; Edit: edtKomutGonder, Buton: btnKomutGonder, Memo: memBilgi
Uygulama ekran görüntüleri


İyi çalışmalar...
Bu arada göndermiş olduğum komutlar bendeki Arduino cihaza özgü komutlardır. CMD komut başlangıcı, 15 ise 15 nolu cihazımın Id'si, B ise yaptırmak istediğim iştir (Led yak, alarm çal, kapıyı aç/kapat gibi). Geriye ise 15 B 1 dönüyor. 15. Cihazın B komutu yerine getirildi (1 ile) diyor.
Delphi IDE'si ile COM port'una bağlı herhangi bir cihazla iletişime geçmek için harici bileşenler kullanıyoruz. (Tuğrul Hocamızın yeni oluşturacağı Low Level bölümünde İnşaallah iletişim kodlarını kendimiz yazarız)
Burada ücretli ve ücretsiz olmak üzere 2 farklı alternatifimiz var. Ben her ikisini de kullanıyorum. Ücretli olanlardan Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol, ücretsiz olanlardan ise Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol'yu kullanıyorum.
Her ikisini de anlatabilirim. Fakat bu tip bileşenlerin kullanım ve çalışma prensibi üç aşağı beş yukarı aynıdır.
Burada örnek olması açısından Delphi IDE'sinde Turbo Power AsyncPro componet seti ile nasıl kullanacağımızı anlatmak istiyorum. (Talep olursa Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol kullanımını da ayrı bir makale de anlatabilirim)
yhackup, Arduino programlama kodları ile Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol paylaşmış. Bu konuda benim de bir katkım olsun. Ben de Delphi ile nasıl yapabileceğimizi anlatayım.
Bir örnekle; Edit ile yazılan komutu, buton aracılığıyla cihaza iletme, cihazımızdan gelen geri dönüşü ise Memo'ya yansıtacağımız örnek bir uygulama yapalım.
Uygulama ara yüzü için;
Yeni bir VCL Form Application uygulaması oluşturalım.
Ana form üzerinde birer adet Button, Edit ve Memo nesnesi yerleştirelim.
Cihazdan gelen bilgileri alıp, mevcut formda kullanılmak üzere aktaracağımız bir değişken tanımlayalım.
private FCevap: string;
Tool Palette penceresinde, APRO sekmesinden bir adet ApdComPort nesnesini forma yerleştirelim.
(Component'i kurmamış olanlar yukarıda indirme linkini paylaşmıştım, indirip kurulum yapabilirler. Delphi 10 Seattle, Delphi 10.1 Berlin kullananlar ise
doğrudan GetIt Manager ile doğrudan kurabilirler)
İlk olarak formun OnCrete olayında, COM port bağlantısını yapacak olan, ApdComPort nesnesinin temel özelliklerini
belirleyelim.
procedure TForm1.FormCreate(Sender: TObject); begin memBilgi.Clear; FCevap := ''; With ApdComPort1 do begin ComNumber := 2; { Cihazın USB ile bağlı olduğu sanal port numarası } Baud := 115200; { Cihaz iletişim saniyedeki iletişim hızı, cihaza göre değişir } DataBits := 8; Parity := pNone; StopBits := 1; BufferFull := 0; BufferResume := 0; AutoOpen := True; {Diğer AsyncPro bileşenleri tarafından kullanıldığında otomatik olarak bağlantı kurmasını sağlar} Open := true; {COM portunu iletişime açar} end; end;
Yukarıdaki kod blokları arasında hangi özelliğin ne amaçla kullanıldığını yazdım. Açıklama yapmadığım özellikler ise veri iletişiminde kullanılan temel ve varsayılan özelliklerdir.
Dolayısıyla bu özelliklerin varsayılan değerlerde kalması veri iletişim hızınızı optimize edecektir.
Bu tip uygulamalarda cihaz ile uygulamamız arasındaki tüm hareketlerin algılanması ve bir log benzeri panele yansıtılması son derece önemlidir.
Bunun için uygulamamızda bir Memo nesnesi kullandık.
Şimdi cihazın bağlı olduğu COM portu ile bağlantı durumunu kontrol ederek, Memo nesnesine yansıtalım.
ApdComPort nesnesinin OnPortOpen olayı, başarılı bir bağlantıda çalışmaktadır.
Bu olaya aşağıdaki kodu yazalım.
procedure TForm1.ApdComPort1PortOpen(Sender: TObject); begin memBilgi.Lines.Add('COM' + ApdComPort1.ComNumber.ToString + ' Portu ile bağlantı sağlandı.'); end;
ApdComPort nesnesinin OnPortClose olayı ise, COM port bağlantısının kesildiği anda çalışmaktadır.
Bu olaya da aşağıdaki kodu yazalım.
procedure TForm1.ApdComPort1PortClose(Sender: TObject); begin memBilgi.Lines.Add('COM' + ApdComPort1.ComNumber.ToString + ' Portu ile bağlantı kesildi.'); end;
İletişim kurduğumuz cihazdan gelen tüm verilerin yakalanabildiği ApdComPort olayı ise OnTriggerAvail'dir.
Bu olaya da aşağıdaki kodu yazalım.
procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); const idxBeklemeSuresi: SmallInt = 50; var I: Word; C: AnsiChar; begin for I := 1 to Count do begin C := ApdComPort1.GetChar; FCevap := FCevap + C; end; if FCevap.Trim <> '' then begin TThread.CreateAnonymousThread( procedure() begin Sleep(idxBeklemeSuresi); memBilgi.Lines.Add('Gelen Cevap: ' + FCevap); FCevap := ''; end).Start(); end; end;
Son olarak Cihazımıza bir komut göndermek için Button nesnesinin OnClick olayına aşağıdaki kodu yazalım.
procedure TForm1.btnKomutGonderClick(Sender: TObject); begin ApdComPort1.PutString(edtKomutGonder.Text); end;
Bu kod içerisinde yer alan ApdComPort'un, PutString metodu, metinsel veriyi cihaza iletmeyi sağlamaktadır.
Not: Nesne isimlendirmeleri; Edit: edtKomutGonder, Buton: btnKomutGonder, Memo: memBilgi
Uygulama ekran görüntüleri


İyi çalışmalar...
Bu arada göndermiş olduğum komutlar bendeki Arduino cihaza özgü komutlardır. CMD komut başlangıcı, 15 ise 15 nolu cihazımın Id'si, B ise yaptırmak istediğim iştir (Led yak, alarm çal, kapıyı aç/kapat gibi). Geriye ise 15 B 1 dönüyor. 15. Cihazın B komutu yerine getirildi (1 ile) diyor.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.